【ARES Standard対応】選択した図面内の文字を「上から順」にExcel(CSV)へ一括書き出しするLISPマクロ

CAD図面内にある複数の型番や注記テキストを、「図面の上から順番にエクセルにリスト化したい」と思ったことはありませんか?

ARESやAutoCADの標準機能である「データ書き出し(DATAEXTRACTION)」コマンドでもエクセル出力は可能ですが、書き出される順番が作成順(ランダム)になってしまい、後からエクセル側で並び替える手間が発生します。

そこで今回は、ARES Standard(および上位版)や、AutoCAD(LISP対応版)で動作するLISPプログラム(マクロ)を使って、図面内の「1行文字」と「マルチテキスト」を自動でY座標の大きい順(上から順)に並び替え、テキスト内容だけをCSV形式で一括出力する方法を解説します!

1. 自動書き出しLISPプログラム(コード)

まずは以下のコードをすべてコピーして、メモ帳などのテキストエディタに貼り付けてください。ファイル名を txt2csv.lsp (拡張子を .lsp)にして保存します。

※このコードは互換性が高いため、ARESとAutoCADのどちらでも修正なしでそのまま動作します。

(defun c:TXT2CSV ( / ss i ent pnt y txt lst filename file x)
  (princ "\n--- 文字を上から順にCSV書き出し ---")
  
  ;; 1. 1行文字(TEXT)とマルチテキスト(MTEXT)を選択
  (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  
  (if ss
    (progn
      (setq i 0)
      (setq lst nil)
      
      ;; 2. 選択した文字の「内容」と「Y座標」を取得してリスト化
      (repeat (sslength ss)
        (setq ent (entget (ssname ss i)))
        ;; 10番DXFコードから位置を取得(MTEXTは10、TEXTも10を基準に取得)
        (setq pnt (cdr (assoc 10 ent)))
        (setq y (cadr pnt)) ; Y座標
        
        ;; 文字列の取得(MTEXTの一部の書式コードはそのまま残ります)
        (setq txt (cdr (assoc 1 ent)))
        
        ;; リストに格納: (Y座標 . 文字列)
        (setq lst (cons (cons y txt) lst))
        (setq i (1+ i))
      )
      
      ;; 3. Y座標の降順(大きい順 = 上から順)にソート
      (setq lst (vl-sort lst '(lambda (a b) (> (car a) (car b)))))
      
      ;; 4. 保存先CSVファイルの指定
      (setq filename (getfiled "CSVファイルを保存" "" "csv" 1))
      
      (if filename
        (progn
          (setq file (open filename "w"))
          
          ;; 5. ファイルへの書き出し(文字列のみ)
          (foreach x lst
            (write-line (cdr x) file)
          )
          
          (close file)
          (princ (strcat "\n書き出しが完了しました: " filename))
        )
        (princ "\nキャンセルされました。")
      )
    )
    (princ "\n文字が選択されませんでした。")
  )
  (princ)
)

2. 使い方・操作手順

作成したLISPファイルを使って、実際に文字を書き出す手順は以下の5ステップです。ARES、AutoCADともに共通の操作で実行できます。

  1. LISPの読み込み: CADの作図画面に、保存した txt2csv.lsp ファイルをドラッグ&ドロップします(または APPLOAD コマンドでロード)。
  2. コマンドの実行: コマンドラインに TXT2CSV と入力してEnterを押します。
  3. 文字の選択: 画面上の文字(1行文字・マルチテキスト)をマウスでまとめて範囲選択し、Enterを押します(関係のない線分などを一緒に囲んでも、文字だけが自動抽出されます)。
  4. ファイルの保存: 保存先を指定するウィンドウが表示されるので、任意のフォルダ(デスクトップなど)を選択し、ファイル名を入力して保存します。
  5. Excelで確認: 出力されたCSVファイルをExcelで開くと、図面の上にあった文字から順に、テキスト内容だけがきれいに一列に並んでいます。

3. 💡 使うときの注意点・Tips

  • 左右の並び順について: このプログラムは純粋に「Y座標(高さ)」の大きさだけでソートします。そのため、ほぼ同じ高さで左右に並んでいる文字がある場合、ミリ単位のわずかな高低差によって上下が判定されます。
  • マルチテキストの書式コード: マルチテキスト内で部分的に色やフォントを変更している場合、その制御コード(例: {\fMS Gothic;文字列})がそのままCSVに出力されてしまうことがあります。文字化けのように見える場合は、CAD側でマルチテキストの書式を解除するか、1行文字(TEXT)に分解(EXPLODE)してから実行することをおすすめします。

ARES StandardやAutoCADでLISPを活用すれば、手作業でのコピー&ペーストやExcel側での並び替えといった細かなストレスを完全にゼロにできます。大量の図面から注記やリストを抽出する際は、ぜひ試してみてください!