【AutoCAD VBA極意】「1’6″」を数値に変換せよ!Utility.DistanceToRealでユーザー入力を完全に掌握する
AutoCADの世界で、マクロの記録から一歩踏み出したあなたへ。
「特定の図形を動かす」だけのコードはもう卒業です。これからは、「ユーザーがどんな形式で入力しても、AutoCADが理解できる数値(Double型)に変換する」という、プロのエンジニアが現場で必ず使う強力な武器を授けましょう。
建築図面でよく遭遇する「1’6″(1フィート6インチ)」のような表記。これをそのままプログラムで計算しようとすると、型変換エラーで頭を抱えることになりますよね。
今日は、AutoCADの神髄である`Utility`オブジェクトを使って、この難問を華麗に解決する方法を伝授します。
—
1. なぜ「そのまま」ではいけないのか?
AutoCADは非常に賢いエンジンです。コマンドラインでは「1’6″」と打てば、即座に「18インチ(または変換後の単位)」として認識してくれます。しかし、VBAの世界では、文字列はただの「文字列」です。
‘ 悪い例:これでは計算できない
Dim dist As Double
dist = “1’6″” ‘ 型不一致エラーが発生!
VBAは、数学的に厳密なデータ(Double型など)を求めます。そこで登場するのが、`ThisDrawing.Utility`というオブジェクトです。これはAutoCADの頭脳そのもので、「AutoCAD内部の単位計算エンジンをVBAから呼び出す」ためのインターフェースなのです。
—
2. 魔法のメソッド:`DistanceToReal`
今回の主役は `DistanceToReal` メソッドです。これは、ユーザーが入力した文字列を、AutoCADの「単位系設定」に基づいて実数値に変換する唯一無二の関数です。
基本構文
‘ 構文:Utility.DistanceToReal(文字列, 単位系)
Dim result As Double
result = ThisDrawing.Utility.DistanceToReal(“1’6″””, acArchitectural)
- 第一引数: 変換したい文字列(”1’6″” など)
- 第二引数: 単位系の種類(今回は建築表記なので `acArchitectural` を指定)
—
3. 実践:柔軟な入力インターフェースを作る
それでは、実際にユーザーから入力を受け取り、それを計算可能な数値に変換するプロフェッショナルなコードを見ていきましょう。
Sub ConvertInputToDouble()
Dim util As AcadUtility
Set util = ThisDrawing.Utility
Dim userInput As String
Dim convertedValue As Double
‘ ユーザーに直接入力を促す
On Error Resume Next ‘ ユーザー入力を安全に扱うためのガード
userInput = util.GetString(True, vbCrLf & “距離を入力してください (例: 1’6″”): “)
If Err.Number <> 0 Then
MsgBox “入力がキャンセルされました。”
Exit Sub
End If
On Error GoTo 0
‘ ここが核心:建築単位として実数値に変換
‘ acArchitectural: 建築単位(フィート・インチ)
‘ acDecimal: 十進数(mmなど)
convertedValue = util.DistanceToReal(userInput, acArchitectural)
‘ 結果を検証
MsgBox “変換された数値は: ” & convertedValue & ” です。”
‘ このconvertedValueを使えば、線分作成などの計算が自由自在!
End Sub
—
4. 陥りやすい罠とエンジニアの知恵
このコードを使いこなす上で、知っておくべき「現場の鉄則」が3つあります。
1. 単位系の不一致:
図面の単位設定が「十進数(mm)」なのに `acArchitectural` を指定すると、予期せぬ変換ミスが起きることがあります。常に現在の図面設定と整合性を取るようにしましょう。
2. エラーハンドリング:
ユーザーは必ず「あ」や「12/」といった、解析不可能な文字列を入力します。必ず `On Error Resume Next` を使い、エラーが発生した場合は「正しい値を入力してください」と促す設計にしてください。
3. ダブルクォーテーションの扱い:
VBAのコード内で `”` (ダブルクォーテーション) を文字列として扱うには、二重にする必要があります。例:`”1’6″””` と書くことで、プログラム内では `”1’6″”` という文字列として認識されます。
—
最後に:ここをクリアすれば、あなたはもう「脱・初心者」
`DistanceToReal` を理解したということは、AutoCADが持つ「ユーザーインターフェースとしての柔軟性」をプログラムに取り込めたということです。
これさえできれば、複雑な計算を行う自動作図ツールや、寸法値を読み取って集計する積算ツールなど、開発できる幅が一気に広がります。
「AutoCAD VBAは難しい」と言われがちですが、こうして一つずつ、CADの心臓部に触れていけば怖くはありません。次は、`GetPoint` を使ってユーザーのクリック位置を取得し、そこに変換した数値をどう反映させるか……。
また次の極意でお会いしましょう。あなたの開発が、より速く、より正確になることを応援しています!
