AutoCAD VBAを掌握する:ファイル名から「図面番号」と「リビジョン」を自動抽出する極意
こんにちは。AutoCADの自動化の世界へようこそ。
「マクロの記録」ボタンを押すだけの自動化から一歩踏み出し、AutoCADの根幹である「オブジェクトモデル」を操る準備はいいですか?今日は、現場で最も重宝する「ファイル名から情報を抽出し、図面枠へ反映させる」という、実戦的な技術を伝授します。
ただコードを写すのではなく、なぜそう書くのかという「設計思想」まで深く理解してください。
—
1. AutoCADオブジェクトモデルの階層を理解する
まず、私たちが操作する図面の居場所を知りましょう。AutoCAD VBAでは、すべてが階層構造になっています。
- AcadApplication: AutoCADそのもの(最上位)
- AcadDocument: 今開いている図面ファイル
- FullName: 図面ファイルのフルパス(例: `C:\Projects\A100-Rev02.dwg`)
この `FullName` プロパティには、私たちの仕事に必要なメタデータが詰まっています。ここから文字列を切り出すことは、図面管理の自動化における「第一歩」なのです。
—
2. 正規表現(RegExp)という最強の武器
ファイル名が「A100-Rev02.dwg」のような命名規則で統一されている場合、単純な `Left` や `Mid` 関数で切り出すのは危険です。図面番号の桁数が増えた瞬間にバグるからです。
ここで使うのが VBScript.RegExp(正規表現) です。
「特定のパターン」を定義し、そこから文字列を賢く抜き出す技術です。
実装コード:ファイル名解析エンジン
以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてください。
Sub ExtractDrawingInfo()
Dim doc As AcadDocument
Dim fullName As String
Dim fileName As String
Dim regex As Object
Dim matches As Object
‘ 現在のドキュメントを取得
Set doc = ThisDrawing
fullName = doc.FullName
‘ フルパスからファイル名だけを抽出(念のため)
fileName = Mid(fullName, InStrRev(fullName, “\”) + 1)
‘ 正規表現オブジェクトの生成
Set regex = CreateObject(“VBScript.RegExp”)
‘ パターン定義: (図面番号)-(Rev数字) というルールを想定
‘ ([^-]+) は「ハイフン以外」をグループ化
‘ Rev([0-9]+) は「Revの後の数字」をグループ化
regex.Pattern = “([^-]+)-Rev([0-9]+)\.dwg”
regex.IgnoreCase = True
‘ 解析実行
If regex.Test(fileName) Then
Set matches = regex.Execute(fileName)
‘ グループ抽出結果を表示
MsgBox “図面番号: ” & matches(0).SubMatches(0) & vbCrLf & _
“リビジョン: ” & matches(0).SubMatches(1)
Else
MsgBox “ファイル名が命名規則に合致しません。”
End If
End Sub
—
3. なぜこのコードが「現場レベル」なのか?
初心者の方が陥りやすいミスは、`InStr` 関数を何重にもネストして、可読性の低いコードを書くことです。
- 拡張性: 正規表現なら、もし将来的に「A100_Rev02_2023.dwg」のようにルールが変わっても、`regex.Pattern` を書き換えるだけで対応できます。
- 堅牢性: `regex.Test` で事前に判定を行うことで、命名規則違反のファイルを開いたときにエラーで落ちる(クラッシュする)のを防げます。
—
4. 陥りやすい「落とし穴」への警告
初心者が必ず一度はハマるポイントを伝授します。
1. 図面未保存時のエラー:
新規作成したばかりの図面は `FullName` が空です。必ず `If doc.Path = “” Then` で保存済みか確認するガード節を入れましょう。
2. オブジェクトの解放:
`Set regex = Nothing` は忘れずに。AutoCAD VBAはメモリ管理が繊細なため、使ったメモリは自ら掃除する癖をつけてください。
3. 大文字・小文字の区別:
`IgnoreCase = True` を設定しないと、`REV01` と `rev01` で挙動が変わります。現場の運用ルールに合わせて設定してください。
—
最後に:ここをクリアすれば、あなたはもう初心者ではない
今回学んだのは「文字列を扱う力」ですが、これはそのまま「属性ブロックの値を書き換える力」や「Excelと連携して図面リストを作る力」へと直結します。
次は、抽出した情報を `AcadBlockReference` を経由して、図面枠の属性(Attribute)に書き込む方法に挑戦してみてください。それができれば、手作業の転記ミスは一生ゼロになります。
AutoCAD VBAは、あなたの退屈な作業を消し去る魔法の杖です。ぜひ、このコードを自分の図面で動かしてみてください。分からないことがあれば、またいつでも聞きに来てくださいね。応援しています!
