電卓はもう不要!図面の数値を一瞬で合計して書き込むLISP「++」

図面の中にある「面積」や「長さ」、「部品の数量」などの数値。
これらを一つずつ電卓で叩いて集計していませんか?

「えーっと、25.5 + 18.2 + …」と入力している最中に電話が鳴って、「あれ、どこまで足したっけ!?」と最初からやり直しになる——そんな悔しい経験は誰にでもあります。

今回ご紹介するLISP「++(プラスプラス)」を使えば、そんな苦痛から一瞬で解放されます。画面上の数値を選択するだけで合計値を算出し、そのまま図面に書き込むことができます。

++
選択した数値テキストを合計して配置
ファイル名:PP_SumTexts.lsp

フクロウ
フクロウ

夜遅くまで電卓を叩いて合計が合わない!って経験、誰もがあるはず。
これからは一瞬で合計!!

💡このLISPでできること

  • 窓選択・クロス選択で一括集計(ポチポチ選んでもOK必要なし)
  • 電卓との往復がなくなり、視線移動・手の移動がゼロに
  • 選択した文字のスタイル・高さをそのまま引き継いで配置
  • 小数点以下の表示桁数をその場で指定可能(前回の設定を記憶)

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

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

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

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

コマンド名はわかりやすく++(プラスプラス)です。

  1. ++入力して Space で決定
  2. 合計したい数値テキストを一括選択して Space(又は右クリック)で確定
  3. 小数点以下の桁数を入力(前回の入力値を記憶しているのでそのままEnterでもOK)
  4. 合計値を書き出したい場所をクリック!

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

※ダウンロードしたファイルを右クリックして「すべて展開(解凍)」してからご使用ください。

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

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

Lisp
;;; Support: https://easycadwork.com
;;; X(Twitter): https://x.com/easycadwork
;;; 概要: 複数選択した数値テキストの合計を一括計算し、指定位置に配置する

(defun c:++ (/ ss i entData txtVal total validCnt precision pt firstEnt style height)
  (setq *error* ECW_Error) ; エラーハンドラ設定
  (ECW_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))))
              txtVal  (cdr (assoc 1 entData)))
        
        (if (setq val (distof txtVal))
          (setq total (+ total val)
                validCnt (1+ validCnt))
        )
      )

      ;; --- 3. 結果の配置 ---
      (if (> validCnt 0)
        (progn
          (if (null *plus-prec*) (setq *plus-prec* 2))
          (setq precision (getint (strcat "\n小数点以下の表示桁数を入力 <" (itoa *plus-prec*) ">: ")))
          (if precision (setq *plus-prec* precision))

          (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 2 *plus-prec*))
                  (cons 7 style)
                  '(72 . 1)
                  (cons 11 (trans pt 1 0))
                  '(73 . 2)
                )
              )
              (princ (strcat "\n完了: " (itoa validCnt) " 個の数値を合計しました。"))
            )
          )
        )
        (princ "\n※有効な数値が見つかりませんでした。")
      )
    )
    (princ "\n※文字が選択されませんでした。")
  )

  (ECW_End)                ; 設定復元・UNDO終了
  (setq *error* nil)       ; エラーハンドラ解除
  (princ)                  ; 静かに終了
)
Lisp

✏️まとめ:計算はLISPに任せて、あなたは「チェック」に集中しよう

図面を描く上で、面積や延長、材料の数量など、集計作業は必ず付いて回ります。

もちろん、エクセルをしっかり組んで集計するのも素晴らしい方法です。でも実務では、「ちょっとこの部分の合計面積だけ知りたい」「表の数値を打ち換えたから、パッと合計を出し直したい」といった、エクセルを開くまでもない日常の小さな集計がものすごく多いはずです。

そんな時、この「++」があれば、あなたの仕事は**「拾い(選択)忘れていないかのチェック」**だけで済みます。面倒な計算はすべてLISPが正確にやってくれるからです。

フクロウ
フクロウ

人間は『考えること』と『チェックすること』に集中して、計算はCADに任せましょう。この小さな自動化の積み重ねが、あなたの時間を生み出します。

コメント