窓選択で一発計算!数値テキストの平均値を自動計算・配置するLISP「AVG」

図面の中に散らばる「測定値」や「レベル(高さ)」などの数値データ。

これらの平均値を求めるとき、一つ一つ電卓で足して、最後に個数で割る……という作業をしていませんか?

「計算し終わって図面に書き込んだら、一つ数値を見落としていた!」と気づいたときの絶望感。手作業の計算は、時間と精神力をゴリゴリと削っていきます。

今回ご紹介するLISP「AVG(アベレージ)」を使えば、そんな面倒な計算から完全に解放されます。平均したい数値をマウスでサッと窓選択するだけで、自動で平均値を計算し、図面上の好きな場所に配置してくれます。

AVG
選択した数値テキストの平均値を計算して配置
ファイル名:AVG_CalculateAverage.lsp

フクロウ
フクロウ

土量計算のレベルの平均出しで毎回ため息をついていた昔の自分に渡したいツールです。

💡このLISPでできること

  • 窓選択で一瞬で集計(ポチポチ選ぶ必要なし。窓選択や交差選択で一気に数値を拾えます)
  • 計算の手間とミスがゼロ(合計して割るという手作業がなくなり、ヒューマンエラーが物理的に発生しません)
  • 不要な文字は自動で無視(数値として認識できない文字はスキップして処理が止まりません)

⚙️運用の準備(確実に動かすための初期設定)

このLISPは単体でも動作しますが、当ブログで推奨している共通ユーティリティや自動ロード設定を行っておくと、万が一のエラー時や「元に戻す(UNDO)」の動作が完璧になります。

まだ設定が終わっていない方は、先に以下の記事を読んで「爆速作図の土台」を作っておくと便利です。(後でゆっくり設定、今はすぐ使いたい方は次へ↓

🕺使い方はたったの4ステップ!

コマンド名は読んで字のごとくAVGです。

  1. AVG と入力して Space で決定
  2. 平均を出したい数値テキストを選択(個別・窓選択どちらでもOK)して Space (エンター)
  3. 自動計算が実行される
  4. 平均値を置きたい場所をクリック!

⚠️ マルチテキスト(MTEXT)には対応していません。通常の文字(TEXT)をご使用ください。

💾LISPのダウンロードと追加方法

※ダウンロードしたファイルを右クリックして「すべて展開(解凍)」してからご使用ください。
ロードがうまくいかない方はこちらを確認してください

💡「LISPの使い方が全くわからない!」という方は、まずこちらの記事で読み込み方をマスターしてください。とても簡単です。
→ AutoCADでLISPをロードする3つの方法

コピーしたいという方はこちら↓

AVG_CalculateAverage.lsp
;;; Support: https://easycadwork.com
;;; X(follow me!): https://x.com/easycadwork
;;; 概要: 選択した複数の文字から数値を抽出し、平均値を計算して図面に配置する

(defun c:AVG (/ ss i entData txtStr val total validCnt pt firstEnt style height)
  ;; 共通ユーティリティの有無を確認して実行(ハイブリッド設計)
  (if (type ECW_Error) (setq *error* ECW_Error))
  (if (type ECW_Start) (ECW_Start))

  ;; --- メイン処理 ---
  (princ "\n平均を計算する数字(テキスト)を選択: ")
  (if (setq ss (ssget '((0 . "*TEXT"))))
    (progn
      (setq total 0.0
            validCnt 0)
      
      ;; 数値の抽出と合計計算
      (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 "' は数値として認識できないため除外しました。"))
        )
      )
      
      ;; 平均値の算出と配置
      (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
              (list
                '(0 . "TEXT")
                (cons 10 (trans pt 1 0))
                (cons 40 height)
                (cons 1 (rtos (/ total validCnt) 2 2))
                (cons 7 style)
              )
            )
            (princ (strcat "\n完了: " (itoa validCnt) " 個の数値の平均値を配置しました。"))
          )
          (princ "\n※配置位置の指示がキャンセルされました。")
        )
        (princ "\n※有効な数値が一つもありませんでした。")
      )
    )
    (princ "\n※テキストが選択されませんでした。")
  )

  (if (type ECW_End) (ECW_End))
  (princ)
)

✏️まとめ:計算はLISPに任せて、あなたは「拾い忘れ」だけ確認する

平均を求める作業は、計算ももちろん大事ですが「一つも見落とさずに数値を拾えているか」という緊張感ではないでしょうか。

このLISPを使えば、その緊張感からも解放されます。あなたがやることは、対象の数値を選択するだけ。計算はLISPが正確にやってくれます。気にするべきは「拾い忘れがないか」の1点だけです。

フクロウ
フクロウ

電卓と格闘していた時間を、おいしいコーヒーを飲む時間や、早く帰って家族と過ごす時間に変えてください。

コメント