はじめに
今回はExcel VBAを使用して、AutoCADに円を描く方法を紹介します。ExcelからAutoCADを操作することで、図面作成の作業を効率化できます。
EXCELでのVBAの準備
Excel VBAでAutoCADを操作するために、AutoCADのオブジェクトライブラリを参照設定する必要があります。
- VBAエディタのメニューから「ツール」→「参照設定」を選択します。
- リストから「AutoCAD Type Library」または「AutoCAD Object Libraly」を選択し、チェックを入れて「OK」をクリックします。
(※Verにより多少名称が変わるかもしれません。「AutoCAD 2021 Type Library」など。)
円(サークル)を描くサンプルコード
それでは、エクセルに入力した値を使って円を描くサンプルコードを紹介します。
まずは下のようなエクセルシートを準備します。
A2セル~D2セルの並びが入力セルです。
E2は描いた円のハンドル値を取得する用のセルです。入力は不要です。
ハンドル値はAutoCADの自動化を進める上で後々役に立つので取得するようにしていますが、今の段階では特に気にする必要はありません。
VBAのコードは以下のようになります。
Sub DrawCircleInAutoCAD()
'AutoCADアプリケーションオブジェクトを宣言
Dim acadApp As Object
'AutoCADドキュメントオブジェクトを宣言
Dim acadDoc As Object
'サークルオブジェクトを宣言
Dim circleObj As Object
'AutoCADが起動していなければ起動し、すでに開いていたら取得する。
On Error Resume Next
Set acadApp = GetObject(,"AutoCAD.Application")
If acadApp Is Nothing Then
Set acadApp = CreateObject("AutoCAD.Application")
End If
On Error GoTo 0
'AutoCADを表示
acadApp.Visible = True
'AutoCADドキュメントが開いてなければ新規作成し、開いていれば取得する。
On Error Resume Next
Set acadDoc = acadApp.ActiveDocument
If acadDoc Is Nothing Then
Set acadDoc = acadApp.Documents.Add
End If
On Error GoTo 0
'円の中心点を入れる変数の宣言
Dim centerPoint(0 To 2) As Double
'中心点を設定
centerPoint(0) = Cells(2,1) 'X座標
centerPoint(1) = Cells(2,2) 'Y座標
centerPoint(2) = Cells(2,3) 'Z座標
'半径を入れる変数の宣言
Dim radius As Double
'半径の設定
radius = Cells(2,4) '半径
'円を作成
Set circleObj = acadDoc.ModelSpace.AddCircle(centerPoint, radius)
'ハンドルの取得
Cells(2,5) = circleObj.Handle
'オブジェクト範囲の表示
acadDoc.Application.ZoomExtents
'再作図
acadDoc.Regen acActiveViewport
'メッセージを表示
MsgBox ”円を描きました!”
End Sub
円を描くVBA Functionプロシージャ
コードをFunctionプロシージャとして作成すれば、もっと容易に大量の円を描くことが出来るようになります。ここでは、その方法を記述します。
まず、EXCEL VBAの標準モジュールの中に下記コードをこのまま記述しましょう。
Public acadApp As AcadApplication 'AutoCADのアプリケーションドキュメントを保持する変数
Public acadDoc As AutoCAD.AcadDocument 'AutoCADのドキュメントオブジェクトを保持する変数
Function DrawCircleInAutoCAD(x1 As Double, y1 As Double, z1 As Double, r1 As Double) As String
'AutoCADに円を描画する関数
'引数は最初から順に
'中心のX座標、中心のY座標、中心のZ座標、半径の大きさ
'戻り値は描画した円のハンドル
Dim circleObj As AcadCircle '円オブジェクトを保持する変数
Dim centerPoint(2) As Double '中心の座標を保持する配列
Dim radius As Double '半径を保持する変数
'中心の座標を設定
centerPoint(0) = x1
centerPoint(1) = y1
centerPoint(2) = z1
'半径を設定
radius = r1
'AutoCADのモデル空間に円を追加
Set circleObj = acadDoc.ModelSpace.AddCircle(centerPoint, radius)
'追加した円のハンドルを返す
DrawCircleInAutoCAD = circleObj.Handle
End Function
これで円を描くときはDrawCircleInAutoCAD(x1,y1,z1,r1)を呼び出すだけで簡単に使えます。
例えば、次のようなシートを準備します。
そしてメインのプロシージャのサンプルを記述します。このサンプルはAutoCADを開いた状態で実行してください。アクティブになっている図面に円を描きます。
public Sub main()
On Error GoTo OUT1 'エラーハンドリング:AutoCADが起動していないとき
Set acadApp =GetObject(,"AutoCAD.Application") '既存のAutoCADアプリケーションの取得
On Error GoTo OUT2 'エラーハンドリング:AutoCADのファイルが開かれてない場合
Set acadDoc = acadApp.ActiveDocument 'アクティブなAutoCADドキュメントを取得
On Error GoTo 0 'エラーハンドリングをリセット
'AutoCADに円を描画し、そのハンドルをExcelに書き込む
Cells(2,5) = DrawCircleInAutoCAD(Cells(2,1),Cells(2,2),Cells(2,3),Cells(2,4))
Cells(3,5) = DrawCircleInAutoCAD(Cells(3,1),Cells(3,2),Cells(3,3),Cells(3,4))
Cells(4,5) = DrawCircleInAutoCAD(Cells(4,1),Cells(4,2),Cells(4,3),Cells(4,4))
Exit Sub
OUT1:
MsgBox "AutoCADを起動してください"
Exit Sub
OUT2:
MsgBox "AutoCADのファイルを開いてください"
End Sub
11~13行目がFunctionプロシージャを呼び出しているところです。サンプルのためひとつひとつ記述してますが、For文など使用すれば大量に円を描くことが出来るでしょう。
もちろん、セルから値を読み込まなくても下記のように使用できます。
Cells(2,5) = DrawCircleInAutoCAD(0,0,0,10) '中心点(0,0,0)で半径10の円を描く
円を描きたいけれどハンドルは不要という場合は下記のように適当にdummyなどの変数を用意して対応すればよいでしょう。
dummy = DrawCircleInAutoCAD(0,0,0,10) '中心点(0,0,0)で半径10の円を描く
おわりに
今回は、Excel VBAを使用してAutoCADに円を描く基本的な方法を解説しました。この方法を応用することで、Excelに入力されたデータを基にAutoCADで図形を描画したり、作図作業を自動化することができます。最初はシンプルな図形から初めて、少しずつ複雑な操作に挑戦してみてください。
AutoCADに円を描くのにExcel VBAを使うって?それはミスも減って角が立たなくていいね!
コメント