【上級プロフェッショナルへの登竜門】AutoCAD VBAで実現する「爆速」バージョン変換パイプライン — ODA File Converterとの連携術
こんにちは。現場で日々、設計自動化の荒波に揉まれているエンジニアの皆さん。
今日は、マクロの記録機能(Record Macro)を卒業し、「AutoCADという巨大なシステムを、外側から操る」という、一歩上のステージへ進むための技術をお話ししましょう。
皆さんはこんな経験はありませんか?
「取引先から届いた大量の古いバージョンのDWGファイル。一つずつ開いて『名前を付けて保存』で最新版に変換していくなんて、日が暮れてしまう……」
AutoCADのVBAを使って、`Documents.Open` から `SaveAs` を繰り返すコードを書けば、確かに自動化はできます。しかし、それは「重い鎧を着たまま、全力疾走しようとする」ようなものです。AutoCAD本体を起動し、図面をメモリに読み込み、描画エンジンを動かし……。これでは、数千ファイルの変換には到底耐えられません。
そこで登場するのが、今回の主役である「外部コンバーター(ODA File Converter)を、VBAから『司令塔』として操る」という手法です。
1. なぜAutoCAD本体を使わないのか?(設計思想の転換)
プロフェッショナルな自動化エンジニアは、常に「リソースの最適化」を考えます。
- AutoCAD VBAによる変換: AutoCADを起動 $\rightarrow$ 図面を開く $\rightarrow$ メモリに展開 $\rightarrow$ 保存 $\rightarrow$ 閉じる。
- *欠点:* 非常に重い。メモリ不足でクラッシュしやすい。図面が破損していると、AutoCADごと止まるリスクがある。
- ODA File Converterによる変換: コマンドラインから直接、変換エンジンを叩く。
- *利点:* AutoCADを介さないため、圧倒的に軽量・高速。バックグラウンドで「黙々と」処理ができる。
私たちは、VBAを「図面を描く道具」として使うのではなく、「外部ツールに命令を飛ばす司令塔(オーケストレーター)」として使うのです。
2. 準備するもの:ODA File Converter
今回のパイプラインの核となるのは、[ODA File Converter](https://www.opendesign.com/guestfiles/oda_file_converter) です。これは、AutoCADを持っていなくてもDWG/DXFのバージョン変換ができる、非常に強力なスタンドアロン・ツールです。
これをインストールしておけば、コマンドライン(黒い画面)から「このフォルダのファイルを、このバージョンに変えておけ!」と命令できるようになります。
3. 実践:爆速変換パイプラインのコード
それでは、VBAからこのコンバーターを呼び出すコードを見ていきましょう。
ここでは、初心者の方でも仕組みが理解できるよう、あえて「参照設定」を必要としない「レイトバインディング(遅延結合)」という手法で書いています。これなら、コピー&ペーストしてすぐに動かせますよ。
Option Explicit
''' <summary>
''' ODA File Converterを呼び出し、指定フォルダ内のDWGを一括変換する
''' </summary>
Sub ExecuteVersionConversionPipeline()
' --- 設定エリア:ここを自分の環境に合わせて書き換えてください ---
Dim odaExePath As String
Dim inputFolder As String
Dim outputFolder As String
Dim outputVersion As String ' 例: "ACAD2018"
Dim outputFormat As String ' "DWG" または "DXF"
' ODA File Converterの実行ファイルのパス
odaExePath = "C:\Program Files\ODA\ODAFileConverter\ODAFileConverter.exe"
' 入力フォルダと出力フォルダ(末尾に必ず \ をつけること)
inputFolder = "C:\Work\OldFiles\"
outputFolder = "C:\Work\NewFiles\"
' 出力形式の設定
outputVersion = "ACAD2018"
outputFormat = "DWG"
' ----------------------------------------------------------
' 1. フォルダの存在チェック(エラー防止の基本!)
If Dir(inputFolder, vbDirectory) = "" Then
MsgBox "入力フォルダが見つかりません: " & inputFolder, vbCritical
Exit Sub
End If
' 出力フォルダがなければ作成する
If Dir(outputFolder, vbDirectory) = "" Then
MkDir outputFolder
End If
' 2. コマンドライン引数の組み立て
' ODAの仕様: [Input] [Output] [Version] [Format] [Recursive] [Filter]
' Recursive: 0=なし, 1=サブフォルダ含める
' Filter: *.dwg など
Dim command As String
command = """" & odaExePath & """ " & _
"""" & inputFolder & """ " & _
"""" & outputFolder & """ " & _
outputVersion & " " & _
outputFormat & " 0 ""*.dwg"""
' 3. Shell関数による実行
' Shell関数は「命令を出したら、完了を待たずに次の行へ進む」という特性があります。
' これにより、AutoCADをフリーズさせずにバックグラウンドで処理を走らせられます。
On Error GoTo ErrorHandler
Debug.Print "実行コマンド: " & command
Dim shellResult As Variant
shellResult = Shell(command, vbNormalFocus)
If shellResult <> 0 Then
MsgBox "変換プロセスを開始しました。" & vbCrLf & _
"バックグラウンドで処理が行われます。完了までお待ちください。", vbInformation
Else
MsgBox "コマンドの実行に失敗しました。", vbExclamation
End If
Exit Sub
ErrorHandler:
MsgBox "予期せぬエラーが発生しました: " & Err.Description, vbCritical
End Sub
4. コードの解剖学:ここがプロの視点
このコードには、単なる「記録マクロ」にはない、3つの重要なテクニックが隠されています。
① 文字列の「ダブルクォーテーション」問題
外部プログラムを叩く際、パスにスペースが含まれている(例:`Program Files`)と、コンピュータはそこで命令が途切れたと勘違いしてエラーになります。
`””””` という書き方は、VBAにおいて「文字列の中に `”` を入れる」ためのテクニックです。これで、スペース入りのパスも安全に渡すことができます。
② `Shell` 関数の非同期性
`Shell` 関数は、命令を投げた瞬間に「はい、投げました!」とVBA側に制御を戻します。これが非同期処理です。
もし、変換が終わるまでAutoCADを動かしたくない場合は、少し工夫が必要ですが、基本的には「変換は裏側で勝手にやっておいて、自分は別の作業をする」というスタイルが、最も効率的なワークフローを生みます。
③ エラーハンドリングの重要性
`On Error GoTo ErrorHandler`。これは「もし失敗しても、パニックにならずにエラーメッセージを出して安全に終了する」ための魔法の言葉です。自動化プログラムにおいて、エラーで止まることは、現場では「作業停止」を意味します。プロは必ず「失敗した時の逃げ道」を用意します。
5. さらなる高みへ:Pythonとの連携
もし、あなたが「特定のファイル名パターンだけを抽出したい」「変換後にファイルサイズをチェックして、異常なファイルがあればメールを送りたい」といった、より複雑なロジックを組みたくなったら……。
その時こそ、Pythonの出番です。
1. Pythonでファイルリストを高度なロジックで解析。
2. VBA(またはPythonから直接)で、整理されたリストに基づいてODAを叩く。
このように、「適材適所」でツールを組み合わせるのが、真のアーキテクトです。VBAはAutoCADとの親和性が高い一方で、ファイル操作や複雑な条件分岐、外部ライブラリの活用はPythonの方が圧倒的に得意です。
まとめ:一歩踏み出すあなたへ
「マクロの記録」は、階段の最初の一段です。
そこから「自分でコードを書き、外部のツールを組み合わせ、システム全体の流れを設計する」ことへ進むと、あなたの価値は劇的に高まります。
今回紹介した「外部コンバーターの制御」は、そのための強力な武器になります。まずは、小さなフォルダで試してみてください。コマンドラインが走り、次々とファイルが変換されていく様子を見るのは、エンジニアとして最高の快感ですよ。
「AutoCADを操るのではない。AutoCADという環境を、あなたの意志でコントロールするのだ。」
さあ、次の自動化へ向けて、一歩踏み出しましょう!
