AutoCADで数値の平均を自動計算!窓選択OKのLISP

AutoCADの図面内で数値を含むテキストの平均値を求めるのが面倒なことありませんか?

このLISPを使えば、数値を含むTEXTオブジェクトを選択するだけで、平均値を自動計算&配置できます!

🔧 LISPの特徴

AutoCAD標準の選択方式に対応!(個別選択・窓選択・交差選択OK)

選択した数値を含むTEXTの平均を自動計算(マルチテキストは×)

計算結果をそのまま図面上に配置(手入力不要!)

小数点以下の桁数は二けたに固定(0.00)

数値を含まないテキストは無視するので処理が止まらない!

元の設定を自動で戻すのでAutoCADの動作を乱さない

📌 使い方

  1. LISPをAutoCADにロード(APPLOAD コマンド)
  2. コマンドラインに AVG と入力
  3. 数値を含むTEXTオブジェクトを選択(個別・窓選択どちらでもOK)
  4. Enterキー(右クリックorスペース)で選択終了(自動計算が実行される)
  5. 配置位置をクリックすると、平均値がその場に配置される

📁 ダウンロード

※ZIP形式ですので、解凍してご使用ください。

📝LISP

AVG_CalculateAverage.lisp
;;; 概要: 選択した複数の文字(TEXT)から数値を抽出し、平均値を計算して図面に配置する
(defun c:AVG (/ ss i entData txtStr val total validCnt firstEnt style height pt)
  (setq *error* *myerror*) ; 独自エラーハンドラ設定
  (A_start)                ; 環境変数の退避・UNDO開始
  
  ;; --- 1. テキストの選択 ---
  (princ "\n平均を計算する数字(テキスト)を選択: ")
  (if (setq ss (ssget '((0 . "TEXT"))))
    (progn
      (setq total 0.0
            validCnt 0) ; 有効な数値の個数カウンター
      
      ;; --- 2. 数値の抽出と合計計算 ---
      (repeat (setq i (sslength ss))
        (setq entData (entget (ssname ss (setq i (1- i))))
              txtStr  (cdr (assoc 1 entData)))
        
        ;; 数値として認識できるものだけを合計
        (if (setq val (distof txtStr))
          (setq total (+ total val)
                validCnt (1+ validCnt))
          (princ (strcat "\n※警告: '" txtStr "' は数値として認識できないため除外しました。"))
        )
      )
      
      ;; --- 3. 平均値の算出と作図 ---
      (if (> validCnt 0)
        (if (setq pt (getpoint "\n平均値を配置する位置を指示: "))
          (progn
            (setq firstEnt (entget (ssname ss 0))
                  style    (cdr (assoc 7 firstEnt))
                  height   (cdr (assoc 40 firstEnt)))
            
            ;; 座標スナップの影響を受けない entmake で生成
            (entmake (list '(0 . "TEXT")
                           (cons 10 pt)
                           (cons 40 height)
                           (cons 1 (rtos (/ total validCnt) 2 2))
                           (cons 7 style)))
          )
          (princ "\n配置位置の指示がキャンセルされました。")
        )
        (princ "\n※有効な数値が一つもありませんでした。")
      )
    )
    (princ "\n※テキストが選択されませんでした。")
  )
  
  (A_end)
  (setq *error* nil)
  (princ)
)
Lisp

このLISPを使えば、図面内の数値の平均を手間なく一瞬で求められます!

ぜひ活用してみてください✨

コメント