【入門編】図面上の特定のオブジェクトを自動選択!AcadDocumentのSelectionSets – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの「心臓部」を操る:SelectionSetsで図面を自在に制御せよ

こんにちは。自動化の世界へようこそ。
もしあなたが今、「マクロの記録」ボタンを押して生成された、冗長で修正困難なコードに頭を抱えているなら、今日がその脱却の日です。

AutoCAD VBAにおいて、最も重要かつ強力な概念。それが`SelectionSets`(選択セット)です。これさえマスターすれば、図面内の数千のオブジェクトから、あなたの望むものだけを瞬時に抜き出し、意のままに操ることができます。

さあ、設計の現場を「作業」から「思考」へ変えるための、極限の知見を授けましょう。

1. なぜ「手作業の選択」ではダメなのか?

初学者が最初に陥る罠は、「画面上でオブジェクトを選択してからコードを動かす」という手順です。しかし、真の自動化エンジニアは違います。

「プログラムが自ら条件を判断し、必要なものだけを掴み取る」

これが実現できて初めて、AutoCADはあなたの強力な武器になります。`SelectionSets`は、AutoCADのメモリ上に「仮想的なバケツ」を用意し、条件に合うものだけをそこに放り込むような機能です。

2. 実践:特定の条件でオブジェクトを抽出する

まずは、最も実用的な「画層」と「オブジェクトタイプ」でフィルタリングするコードを見てみましょう。

Sub SelectObjectsByFilter()
Dim sset As AcadSelectionSet
Dim filterType(0 To 1) As Integer
Dim filterData(0 To 1) As Variant

‘ 1. すでに存在するセット名がある場合のエラーを回避(ここが重要!)
On Error Resume Next
ThisDrawing.SelectionSets(“MyFilterSet”).Delete
On Error GoTo 0

‘ 2. 新しい選択セットを作成
Set sset = ThisDrawing.SelectionSets.Add(“MyFilterSet”)

‘ 3. フィルタ条件の設定
‘ DXFコード 0: オブジェクトタイプ (LINE, CIRCLE, LWPOLYLINEなど)
filterType(0) = 0: filterData(0) = “LINE”
‘ DXFコード 8: 画層名
filterType(1) = 8: filterData(1) = “0”

‘ 4. フィルタを適用して選択(画面全体)
sset.Select acSelectionSetAll, , , filterType, filterData

‘ 5. 結果の確認
MsgBox sset.Count & ” 個の線分を抽出しました。”

‘ 6. 使い終わったらメモリを解放(重要!)
sset.Delete
End Sub

3. ここがプロの勘所:陥りやすい罠と対策

① 「名前の重複」でプログラムが死ぬ

`ThisDrawing.SelectionSets.Add(“名前”)` を使う際、同じ名前が既に存在するとエラーになります。上記のコードのように、「まずは一度削除を試みる」というプロセスを挟むのが、現場のエンジニアの鉄則です。

② メモリの掃除(Delete)を忘れない

`SelectionSet`は作成するたびにメモリを消費します。プログラムの最後で必ず `.Delete` してください。これを怠ると、AutoCADの動作が徐々に重くなり、最悪の場合、図面がクラッシュします。「使い終わったらゴミを片付ける」、これはコードの作法です。

③ DXFグループコードを理解する

フィルタリングには「DXFグループコード」というAutoCADの言語を使います。

  • `0`: オブジェクトタイプ
  • `8`: 画層
  • `62`: 色

これらを組み合わせることで、論理的で厳密な選択が可能になります。「赤色で、かつ中心線画層にある円だけ」といった複雑な条件も、この配列を拡張するだけで簡単に実現できるのです。

4. 次のステージへ:さらに効率化するために

`SelectionSet`を使いこなせば、以下のような自動化が可能です。

  • 図面内の全文字(TEXT/MTEXT)を検索し、特定の文字列を置換する
  • 特定の画層のオブジェクトだけを非表示(または削除)にする
  • 図面内のブロックを一括で集計し、Excelへ書き出す

これらの作業を、手作業でやっていたら何時間かかりますか? 自動化すれば、わずか数ミリ秒です。

最後に

コードを書くことは、単なる命令ではありません。AutoCADという巨大なエンジンに対して、「何を、どうしたいのか」という意思を明確に伝えるプロセスです。

最初は難しく感じるかもしれませんが、この`SelectionSets`を理解したあなたは、もう初心者ではありません。次はぜひ、取得したオブジェクトのプロパティ(色や線種など)をループ処理で書き換えることに挑戦してみてください。

何か壁にぶつかったら、またここへ戻ってきてください。いつでもあなたのコードをレビューします。
それでは、快適な自動化ライフを!

タイトルとURLをコピーしました