【入門編】【上級プロフェッショナル向け】図面ファイル名の命名規則強制と自動リネーム機能 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCADの自動化、楽しんでいますか?
「マクロの記録」で操作を覚えたけれど、少し複雑な処理をしようとすると途端に手が止まってしまう……。そんな壁にぶつかっていませんか?

今回は、実際の開発現場で絶対に役立つ「図面ファイル名の命名規則強制と自動リネーム機能」を解説します。

「図面番号のつけ間違えで、社内ニッチな大惨事を引き起こした……」なんて経験、エンジニアなら一度や二度はあるはずです。これを人の目ではなく、AutoCAD VBAにしっかり見張ってもらいましょう。

ここをクリアすれば、単なる「操作の自動化」を超えた、「設計プロセスのガバナンス(統制)」に踏み込めます。基本のキから本質まで、優しく、そして深く紐解いていきますよ。

—

1. なぜ「ファイル名の自動制御」が必要なのか?

設計現場では、ファイル名の付け方にルール(命名規則)が存在します。
例えば、次のようなルールです。

> 【標準命名規則の例】
> `[プロジェクトコード]-[図面番号]-[リビジョン].dwg`
> (例:`PRJ001-A101-00.dwg`)

しかし、人間はうっかりミスをする生き物です。「`PRJ-001_A-101(1).dwg`」のように、勝手なハイフンやスペース、謎の括弧を入れて保存してしまう人が後を絶ちません。これが積み重らうと、PDM(製品データ管理)システムや図面検索AIがエラーを起こし、業務全体の停滞を招きます。

これを防ぐためには、「図面を保存しようとした瞬間(あるいは図面が開かれている状態)」に、VBAでファイル名を強制チェックし、ルール違反なら自動で正しい名前に修正する仕組みが必要です。

—

2. AutoCAD VBAのイベント(Event)を制する

「ボタンを押したら実行するマクロ」はもう卒業です。上級プロフェッショナルへの第一歩は、「AutoCADが特定の動作をしたときに、自動で裏で動くプログラム(イベント)」を使いこなすことです。

図面保存のタイミングをフックするために、AutoCADの `DocumentEvents` または `ApplicationEvents` を使用します。
今回は、図面が「保存される直前」に割り込み、ファイル名を検査するロジックを組み立てます。

⚠️ 初学者が陥りがちなしわざ(エラーの罠)

AutoCAD VBAでイベントを扱う際、「どのドキュメントのイベントを監視しているか」を見失う初心者が非常に多いです。複数の図面が開いているMDI(マルチドキュメントインターフェイス)環境では、アクティブなドキュメントのコンテキストを正しく掴む必要があります。

—

3. 実装コード:命名規則チェッカー&自動リネーム

それでは、開発現場でそのままコピペして使える実践的なコードを公開します。
このコードは、正規表現(RegEx)を用いて厳密にファイル名をチェックし、規則に違反している場合は正しい形に整形して別名保存(またはリネーム)を試みるプロ仕様のモジュールです。

モジュールコード(`ThisDrawing` または クラスモジュール)

Option Explicit

‘ =================================================================و
‘ テーマ: 図面ファイル名の命名規則強制と自動リネーム機能
‘ 概要: 保存時にファイル名を正規表現でチェックし、違反時は自動整形する
‘ =================================================================و

‘ 命名規則パターン(例: PRJ001-A101-00.dwg)
‘ 3桁の英数字ハイフン 4桁の英数字ハイフン 2桁の数字.dwg
Private Const REGEX_PATTERN As String = “^[A-Z0-9]{3}-[A-Z0-9]{4}-\d{2}\.dwg$”

Public Sub ValidateAndRenameDrawing()
Dim doc As AcadDocument
Set doc = ThisDrawing

‘ まだ一度も保存されていない(名前のない)図面は処理対象外
If doc.Path = “” Then
MsgBox “この図面はまだ保存されていません。まずは名前を付けて保存してください。”, vbExclamation, “命名規則チェック”
Exit Sub
End If

Dim currentFullName As String
Dim currentFileName As String
Dim folderPath As String

currentFullName = doc.FullName
currentFileName = doc.Name
folderPath = doc.Path & “\”

‘ 命名規則に適合しているかチェック
If Not IsValidFileName(currentFileName) Then
MsgBox “【警告】ファイル名が標準命名規則に違反しています!” & vbCrLf & _
“現在の名前: ” & currentFileName & vbCrLf & _
“規則に則った形式に自動リネームします。”, vbCritical, “命名規則違反”

‘ 自動整形の実行(ここでは例としてスペースや全角を半角にする等の簡易処理+プレフィックス付与)
Dim fixedFileName As String
fixedFileName = ApplyNamingRule(currentFileName)

Dim newFullName As String
newFullName = folderPath & fixedFileName

On Error GoTo ErrorHandler

‘ 現在のドキュメントを新しい正しい名前で保存
doc.SaveAs newFullName

MsgBox “ファイル名を自動修正しました。” & vbCrLf & “新名称: ” & fixedFileName, vbInformation, “リネーム完了”
Else
‘ 正常な場合は何もしない(あるいはログ出力)
‘ Debug.Print “OK: ” & currentFileName
End If

Exit Sub

ErrorHandler:
MsgBox “リネーム保存中にエラーが発生しました。” & vbCrLf & Err.Description, vbCritical, “致命的エラー”
End Sub

‘ —————————————————————–
‘ 正規表現によるファイル名検証関数
‘ —————————————————————–
Private Function IsValidFileName(ByVal fileName As String) As Boolean
Dim regEx As Object
Set regEx = CreateObject(“VBScript.RegExp”)

With regEx
.Pattern = REGEX_PATTERN
.IgnoreCase = True ‘ 大文字小文字を区別しない
.Global = False
End With

IsValidFileName = regEx.Test(fileName)
Set regEx = Nothing
End Function

‘ —————————————————————–
‘ 違反したファイル名を強制的にルールに合わせる整形ロジック
‘ —————————————————————–
Private Function ApplyNamingRule(ByVal badName As String) As String
‘ ここでは実務に合わせて高度な置換ロジックを組み込みます
‘ 例: 拡張子を除いて、不正な文字をハイフンに置き換え、強制的にフォーマットを整える

Dim baseName As String
baseName = Left(badName, InStrRev(badName, “.”) – 1)

‘ スペースやアンダースコアをハイフンに置換する簡易クリーニング
baseName = Replace(baseName, ” “, “-“)
baseName = Replace(baseName, “_”, “-“)

‘ 簡易的に文字数が足りない場合のフォールバック(現場のポリシーに合わせて調整)
If Len(baseName) < 10 Then baseName = "PRJ001-" & baseName & "-00" End If ApplyNamingRule = baseName & ".dwg" End Function ---

4. コードの深掘りポイント(プロの知見)

ここがこのコードの肝です。エンジニアとして知っておくべきポイントを解説します。

1. `doc.Path = “”` のトラップ
新規作成して一度も保存していない図面に対して `FullName` や `SaveAs` を叩くと、VBAは容赦なくランタイムエラーを起こします。そのため、必ず `Path` が空文字(未保存)かどうかを先頭でガードしています。この「例外を生まない防衛的プログラミング」がプロの証です。

2. VBScript.RegExp の活用
AutoCAD VBA単体には高度な文字列パターンマッチング機能がありません。そこで、Windows標準のCOMコンポーネントである `VBScript.RegExp` を呼び出し、強力な正規表現チェックを実現しています。これにより、複雑な命名規則(桁数、文字種)をわずか数行で正確に判定できます。

3. トランザクションとライフサイクル
ファイルを別名で保存する `doc.SaveAs` を実行すると、AutoCAD内部のドキュメントの参照先(ポインタ)が変わります。不意に古いファイル名を保持したまま後続の処理を続けると、意図しないファイルを上書きする事故に繋がります。保存後は速やかに変数を再同期させる意識を持ちましょう。

—

まとめ:ここをクリアすれば、あなたもAutoCAD VBAのマスターへ

今回は「図面ファイル名の命名規則強制と自動リネーム機能」という、一歩進んだ実務的テーマを解説しました。

単に図面を描くだけのツールだったAutoCADが、「会社の品質基準を守る守護神」に変わる瞬間を感じられたのではないでしょうか。

AutoCAD VBAは、オブジェクトのライフサイクルとイベントのタイミングさえ掴めば、どんなに面倒な定型業務も完全にコントロール下に置くことができます。

ぜひ、あなたの設計環境にもこの仕組みを組み込んで、スマートでエラーのない自動化ライフを満喫してください。ここをクリアしたあなたなら、もう初学者ではありません。自信を持って次の自動化へ進みましょう!

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