+CADLabo.comCAD / LISP / AUTOMATION
AutoLISP初心者講座

ifの実務例|画層があるときだけ処理する

AutoLISPの基本・図形操作のTips一覧
要点

tblsearchで画層の存在を調べ、ifで処理を切り替えます。片方の条件でだけ実行したい処理も、AutoLISPのifで表せます。

始める前に

先に確認すると読み進めやすい記事:

確認の手順

  1. 確認したい画層名を練習図面で決めます。
  2. tblsearchで画層が見つかる場合と見つからない場合を確認します。
  3. ifでメッセージを切り替える掲載例を実行します。
  4. 画層を作成して再実行し、表示が変わることを確認します。

条件分岐とは?

条件分岐とは、「ある条件が真ならAを実行、偽ならBを実行」といった判断をプログラムにさせる仕組みです。AutoLISPでは主に以下の構文が使われます:

  • if
  • cond

if の基本構文

掲載コード
(if 条件式
    真の場合の処理
    偽の場合の処理)

例:数値が正かどうかを判定

掲載コード
(setq num 5)
(if (> num 0)
    (princ "正の数です")
    (princ "0以下の数です"))

cond で複数条件を分岐

condは複数の条件を順番に評価し、最初に真となった条件の処理を実行します。

掲載コード
(cond
    ((< num 0) (princ "負の数です"))
    ((= num 0) (princ "ゼロです"))
    ((> num 0) (princ "正の数です")))

これは if よりも複雑な条件分岐に向いています。

条件が成立したときだけ実行する

実行する側だけを書いたifで表せます。成立しない場合はnilを返します。複数の式をまとめて実行する場合はprognを使います。

AutoLISP
(if (> num 0)
  (princ "正の数です"))

(if (/= num 0)
  (princ "ゼロではありません"))

実用例:レイヤーが存在するかチェック

掲載コード
(defun c:CheckLayer (/ layerName)
  (setq layerName "MyLayer")
  (if (tblsearch "layer" layerName)
      (princ (strcat layerName " は存在します"))
      (princ (strcat layerName " は存在しません")))
  (princ))

このコードは、指定したレイヤーが図面に存在するかどうかを判定します。

まとめ

AutoLISPの条件分岐を使えば、図面の状態に応じた処理を柔軟に記述できます。ifやcondを使いこなすことで、より賢いスクリプトが書けるようになります。

結果の確認

標準AutoLISPでは、ここに掲載するifとcondを使います。when・unlessを別途定義せずに標準関数として呼び出す例は使用しません。

参照資料

対象環境・動作確認

AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。