【入門編】【上級プロフェッショナル向け】バイナリレベルでのDWGバージョン識別:AutoCADを起動せずにファイル形式を特定する – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCADの「中身」を覗く:DWGファイルを起動せず、その正体を見極める極意

こんにちは。AutoCADの自動化を追求する皆さん、日々の開発、お疲れ様です。

多くのエンジニアは、DWGのバージョンを調べるために「とりあえず`Documents.Open`で開いてみる」というアプローチを取ります。しかし、AutoCADを起動して図面を開くという行為は、メモリを大量に消費し、時間もかかる。何千もの図面を扱う現場でそんなことをすれば、PCは悲鳴を上げてしまいますよね。

今日は、「AutoCADを起動せず、バイナリの先頭数バイトを読み取るだけで、ファイルの正体(バージョン)を一瞬で突き止める」という、プロフェッショナルな知見を伝授します。これを知れば、君たちはもう「開いてみるまで中身が分からない」という非効率な開発から卒業です。

—

なぜ「先頭の数バイト」なのか?

DWGファイルは、バイナリ形式のデータベースです。実は、ファイルの先頭数バイトには、そのファイルが「どのバージョンのAutoCADで保存されたか」を示す「シグネチャ(ID)」が必ず刻まれています。

これを専門用語で「AC10xx」と呼びます。例えば:

  • AC1027: AutoCAD 2013-2017形式
  • AC1032: AutoCAD 2018-2024形式

私たちはこの「門番」を読み取るだけでいいのです。余計な処理は一切不要。軽快かつ正確な判定ロジックを組んでいきましょう。

—

実装コード:DWGバージョン判定エンジンの構築

以下のVBAコードは、ファイルの内容をバイナリとして開き、最初の6バイトを文字列として抽出するものです。

‘ ==============================================================================
‘ 機能:DWGファイルの先頭バイトを解析し、バージョンIDを返す
‘ 備考:AutoCADを起動せずに動作する独立した関数です
‘ ==============================================================================
Public Function GetDwgVersion(ByVal filePath As String) As String
Dim fileNum As Integer
Dim header As String
Dim buffer As String 6 ‘ 先頭6バイト分を確保

‘ ファイルが存在するかチェック(基本中の基本ですね)
If Dir(filePath) = “” Then
GetDwgVersion = “Error: File Not Found”
Exit Function
End If

‘ バイナリモードでファイルを開く
fileNum = FreeFile
Open filePath For Binary Access Read As #fileNum

‘ 先頭6バイトを読み込む
Get #fileNum, 1, buffer
Close #fileNum

‘ 読み取ったバイナリを文字列として返す
GetDwgVersion = Trim(buffer)
End Function

‘ 実行テスト用プロシージャ
Sub CheckDwgVersion_Test()
Dim path As String
path = “C:\Projects\Sample.dwg” ‘ 解析したい図面パスを指定

Dim versionID As String
versionID = GetDwgVersion(path)

MsgBox “この図面のバージョンIDは [” & versionID & “] です。”, vbInformation
End Sub

—

このコードをマスターするための3つのポイント

1. `Open For Binary` の重みを知る

通常の `Input` モードとは異なり、`Binary` モードは「ファイルを生のバイト列」として扱います。AutoCADのオブジェクトモデルに依存しないため、爆速です。プロフェッショナルは、「重い処理は避ける」のが鉄則です。

2. バッファ(Buffer)の定義

`Dim buffer As String 6` という書き方は、VBAにおける「固定長文字列」の指定です。メモリ領域をピンポイントで確保することで、無駄なメモリ消費を抑えています。これができると、大規模なデータ処理も怖くありません。

3. よくあるエラー:ファイルロック

もし他のCADソフトやAutoCADがそのファイルを開いている場合、エラーが発生することがあります。本番環境では `On Error Resume Next` で囲むか、ファイルをコピーしてから解析するなどの「防衛的プログラミング」を心がけましょう。

—

次のステップ:君が手に入れる未来

このロジックを使えば、以下のような高度な自動化が可能になります。

  • 図面仕分け機: 指定フォルダ内のDWGを、バージョンごとに自動でサブフォルダへ振り分ける。
  • 警告システム: 規定のバージョンより古い図面を検出し、一括で「バージョンアップ保存」を行うバッチ処理。

プログラミングは、単にコードを書くことではありません。「いかにシステムを軽く、賢く動かすか」という思想を持つことです。

今回紹介した技術は、AutoCAD VBAの世界における「基礎体力」のようなものです。これが身につけば、どんな複雑な要件も、軽やかに解決できるはずですよ。

分からないことがあれば、いつでも聞いてください。君たちの挑戦を、心から応援しています!

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