EXCEL VBAを使ってAutoCADの楕円(Ellipse)を描く方法

EXCEL×AutoCAD

はじめに

今回はExcel VBAを使用して、AutoCADに楕円(Ellipse)を描く方法を紹介します。楕円ってあまり使わないようで、パイプの断面だったりデザインの入った建築物の窓に使ったり、意外と機会がありますよね。もちろん、これもExcelと連携させて自動で作図させることが可能です。やってみましょう。

楕円を描くサンプルコード

それでは、エクセルに入力した値を使って楕円を描くサンプルコードの紹介です。まずは次のようなエクセルシートを準備しましょう。

A2からD2までが入力セルです。E2は作図した後にハンドル値を取得し格納するセルなので作図時には空欄で結構です。

VB
Sub DrawEllipseInAutocad()
  'AutoCADアプリケーションを宣言
  Dim acadApp As Object
  Dim acadDoc 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ドキュメントを新規作成、または取得する。
  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 centerX As Double  '楕円の中心のX座標を格納する変数
  Dim centerY As Double  '楕円の中心のY座標を格納する変数
  Dim xAxisRadius As Double  '楕円のX軸半径を格納する変数
  Dim yAxisRadius As Double  '楕円のY軸を格納する変数
  
  'エクセルシートから値を取得
  centerX = Cells(2, 1)
  centerY = Cells(2, 2)
  xAxisRadius = Cells(2, 3)
  yAxisRadius = Cells(2, 4)
  
  'エラーチェック
  If xAxisRadius <= 0 Or yAxisRadius <= 0 Then
    MsgBox "X軸およびY軸の半径は正の値である必要があります。", vbCritical
    Exit Sub
  End If
  
  '楕円の中心点と半径を定義
  Dim center(0 To 2) As Double '中心の座標を格納する配列
  Dim majorAxis(0 To 2) As Double  '長半径の端点を格納する配列
  Dim ratio As Double '楕円の長半径、短半径の比 1以下にしないといけない
  
  '楕円の中心の入力
  center(0) = centerX
  center(1) = centerY
  center(2) = 0  'Z座標だが、XY平面に描きたいので0とする。
  
  '横に長い楕円か、縦に長い楕円かを判断し、それぞれ長半径、短半径に入力する
  If yAxisRadius > xAxisRadius Then
    '長軸をY方向に設定
    majorAxis(0) = 0
    majorAxis(1) = yAxisRadius
    majorAxis(2) = 0
    ratio = xAxisRadius / yAxisRadius
  Else
    '長軸をX方向に設定
    majorAxis(0) = xAxisRadius
    majorAxis(1) = 0
    majorAxis(2) = 0
    ratio = yAxisRadius / xAxisRadius
  End If
  
  '楕円を作成
  Dim ellipseObj As Object
  Set ellipseObj = acadDoc.modelSpace.AddEllipse(center, majorAxis, ratio)
  
  'ハンドルの取得
  Cells(2,5) = ellipseObj.Handle
  
  'AutoCADを表示
  acadApp.Visible = True
  
  'メッセージを表示
  MsgBox ”楕円を描きました!”
End Sub

楕円(Ellipse)を描くVBA Funtionプロシージャ

コードをFunctionプロシージャとして作成すれば、もっと容易に楕円を描くことが出来るようになりますよ。ここでは、その方法を記述します。

準備

今から紹介する方法は、Excel VBAでAutoCADを操作するために、AutoCADのオブジェクトライブラリを参照設定する必要があります。

VBAエディタのメニューから「ツール」→「参照設定」を選択します。

リストから「AutoCAD Type Library」または「AutoCAD Object Libraly」を選択し、チェックを入れて「OK」をクリックします。
(※Verにより多少名称が変わるかもしれません。「AutoCAD 2021 Type Library」など。)

コード

まず、EXCEL VBAの標準モジュールの中に下記コードをこのままコピペしましょう。
コピーは下のコードの窓の右上のボタンを押すと1クリックで出来ますよ。

VB
Public acadApp As AcadApplication       'AutoCADのアプリケーションドキュメントを保持する変数
Public acadDoc As AutoCAD.AcadDocument  'AutoCADのドキュメントオブジェクトを保持する変数

Function DrawEllipseInAutoCAD(centerX As Double, centerY As Double, xAxisRadius As Double, yAxisRadius As Double) As String
  'AutoCADに楕円を描画する関数
  '引数は最初から順に
  '中心のX座標、中心のY座標、X軸半径の大きさ、Y軸半径の大きさ
  '戻り値は描画した楕円のハンドル
  
  Dim ellipseObj As AcadEllipse '楕円オブジェクトを保持する変数
 
  '楕円の中心点と半径を定義
  Dim center(0 To 2) As Double '中心の座標を格納する配列
  Dim majorAxis(0 To 2) As Double  '長半径の端点を格納する配列
  Dim ratio As Double '楕円の長半径、短半径の比 1以下にしないといけない
  
  '楕円の中心の入力
  center(0) = centerX
  center(1) = centerY
  center(2) = 0  'Z座標だが、XY平面に描きたいので0とする。
  
  '横に長い楕円か、縦に長い楕円かを判断し、それぞれ長半径、短半径に入力する
  If yAxisRadius > xAxisRadius Then
    '長軸をY方向に設定
    majorAxis(0) = 0
    majorAxis(1) = yAxisRadius
    majorAxis(2) = 0
    ratio = xAxisRadius / yAxisRadius
  Else
    '長軸をX方向に設定
    majorAxis(0) = xAxisRadius
    majorAxis(1) = 0
    majorAxis(2) = 0
    ratio = yAxisRadius / xAxisRadius
  End If


  'AutoCADのモデル空間に楕円を追加
  Set ellipseObj = acadDoc.ModelSpace.AddEllipse(center, majorAxis, ratio)
  
  '追加した楕円のハンドルを返す
  DrawEllipseInAutoCAD = ellipseObj.Handle
  
End Function

これで楕円を描くときはDrawEllipseInAutoCAD(centerX, centerY , xAxisRadius, yAxisRadius)を呼び出すだけで簡単に使えます。

例えば、次のようなシートを準備します。

そしてメインのプロシージャのサンプルを記述します。

VB
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) = DrawEllipseInAutoCAD(Cells(2, 1), Cells(2, 2), Cells(2, 3), Cells(2, 4))
  Cells(3, 5) = DrawEllipseInAutoCAD(Cells(3, 1), Cells(3, 2), Cells(3, 3), Cells(3, 4))
  Cells(4, 5) = DrawEllipseInAutoCAD(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文など使用すれば大量に楕円を描くことが出来るでしょう。

もちろん、セルから値を読み込まなくても下記のように使用できます。

VB
Cells(2, 5) = DrawEllipseInAutoCAD(500, 500, 600, 400) '中心(500,500)に縦半径600、横半径400の楕円を描く

楕円を描きたいけれどハンドルは不要という場合は下記のように適当にdummyなどの変数を用意して対応すればよいでしょう。

VB
dummy = DrawEllipseInAutoCAD(500, 500, 600, 400) '中心(500,500)に縦半径600、横半径400の楕円を描く

おわりに

今回は、エクセルを用いて楕円を自動描画するための標準的なコードと、利便性を高めたFunctionプロシージャの紹介でした。この方法を応用し、他の作図法と組み合わせることでExcelに入力されたデータを基にAutoCADで複雑な図形を描画したり、完全な自動作図を実現することができます。少しずつ複雑な操作に挑戦してみてください。

楕円?円のストレッチ版だよ。

コメント

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