ExcelVBAで寸法を記入する

「寸法値を自動で作図したいのですけど、できますか?」という問い合わせを何件か頂いています。
寸法値なんて文字と直線で作ったほうが、思いどおりの場所に入れることができるから便利だと私は思っているのですが、私が寸法についての理解が足りていないのかもしれないので、みなさんは両方やってみて、使いやすいほうを選んでください。

ここまで描いてきた円(ExcelVBAで円を描く)に半径寸法を追加する方法について、AutoCADの寸法記入とエクセルの座標計算による寸法記入、ふたつの方法をご説明します。

AutoCADの寸法記入の使いかた

円に半径寸法を記入するには
1.対象となる図の選択
2.寸法位置の指定
の手順が必要になります。

「対象となる図の選択」をするのに、AutoCADでは円の円周をクリックしています。
エクセルでこの動作をさせるには、円周上にある任意の点の座標を指定します。
ExcelVBAで円を描くで描いた、円1【中心座標(20,30)、半径10mmの円】で考えると、円周上にある任意の点は(20-10,30)や(20,30+10)などになります。

ここでは任意の点を(10,30)、寸法線の位置を円の中心よりX方向に+10mm、Y方向に-10mmのところとしました。
半径寸法記入のコマンドは以下のとおりです。

Print #1, "dimradius " & Range("b2") - 10 & "," & Range("c2") & " " & Range("b2") + 10 & "," & Range("c2") - 10

3つの円それぞれに寸法を入れると、以下のようになります。

Print #1, "Clayer Line01"
Print #1, "circle " & Range("b2") & "," & Range("c2") & " 10"
Print #1, "dimradius " & Range("b2") - 10 & "," & Range("c2") & " " & Range("b2") + 10 & "," & Range("c2") - 10
Print #1, "Clayer Line02"
Print #1, "circle " & Range("b3") & "," & Range("c3") & " 10"
Print #1, "dimradius " & Range("b3") - 10 & "," & Range("c3") & " " & Range("b3") + 10 & "," & Range("c3") - 10
Print #1, "Clayer Line03"
Print #1, "circle " & Range("b4") & "," & Range("c4") & " 10"
Print #1, "dimradius " & Range("b4") - 10 & "," & Range("c4") & " " & Range("b4") + 10 & "," & Range("c4") - 10

円1から円3までに寸法値が入りました。

エクセルの座標計算による寸法記入

エクセルの座標計算による寸法記入は、直線と文字の組み合わせで描いていきます。
寸法線の起点の座標は、円の中心です。
終点の座標は、寸法の矢印の長さと矢印の角度を決めれば計算することが可能です。

ここでは矢印の長さを30mm、矢印の角度を60°としました。
起点の座標を(X0,Y0)とすると、終点の座標は(X0+30×Cos(60)、Y0+30×Sin(60))となります。
(注 エクセルでは角度をラジアンに変更する必要があるため、RADIANSという関数を使い、60°をRADIANS(60)としています)

文字列のところに半径の数値を入れましょう。
エクセルなので、自由に文字を入れることができます。

ExcelVBAは以下のとおりとなります。
(注 文字位置を下中心(bc)から右下(br)に、文字の高さを1.8から2.0、文字の回転角度を0から60に変更しています)

Print #1, "Clayer Line01"
Print #1, "circle " & Range("b2") & "," & Range("c2") & " 10"
Print #1, "dimradius " & Range("b2") - 10 & "," & Range("c2") & " " & Range("b2") + 10 & "," & Range("c2") - 10
Print #1, "line " & Range("b2") & "," & Range("c2") & " " & Range("f2") & "," & Range("g2") & " "
Print #1, "text j br " & Range("f2") & "," & Range("g2") & " 2.0 60 " & Range("e2")
'               ※br                                      ※2.0 60
Print #1, "Clayer Line02"
Print #1, "circle " & Range("b3") & "," & Range("c3") & " 10"
Print #1, "dimradius " & Range("b3") - 10 & "," & Range("c3") & " " & Range("b3") + 10 & "," & Range("c3") - 10
Print #1, "line " & Range("b3") & "," & Range("c3") & " " & Range("f3") & "," & Range("g3") & " "
Print #1, "text j br " & Range("f3") & "," & Range("g3") & " 2.0 60 " & Range("e3")
'               ※br                                      ※2.0 60
Print #1, "Clayer Line03"
Print #1, "circle " & Range("b4") & "," & Range("c4") & " 10"
Print #1, "dimradius " & Range("b4") - 10 & "," & Range("c4") & " " & Range("b4") + 10 & "," & Range("c4") - 10
Print #1, "line " & Range("b4") & "," & Range("c4") & " " & Range("f4") & "," & Range("g4") & " "
Print #1, "text j br " & Range("f4") & "," & Range("g4") & " 2.0 60 " & Range("e4")
'               ※br                                      ※2.0 60

次に矢印のヒゲの部分を作ります。
ここではヒゲの開きの角度を左右それぞれ10°とし、ヒゲの長さを3mmとしました。
ヒゲの起点終点の開き角度は、起点は矢印の角度(60°)に+10°、終点は-10°となります。
円1の矢印ヒゲの起点終点座標を求める計算式は、以下のとおりとなります。

ヒゲ起点X座標 =B2+3×COS(RADIANS(60+10))
ヒゲ起点Y座標 =C2+3×SIN(RADIANS(60+10))
ヒゲ終点X座標 =B2+3×COS(RADIANS(60-10))
ヒゲ終点Y座標 =C2+3×SIN(RADIANS(60-10))

ExcelVBAは以下のとおりです。

Print #1, "Clayer Line01"
Print #1, "circle " & Range("b2") & "," & Range("c2") & " 10"
Print #1, "dimradius " & Range("b2") - 10 & "," & Range("c2") & " " & Range("b2") + 10 & "," & Range("c2") - 10
Print #1, "line " & Range("b2") & "," & Range("c2") & " " & Range("f2") & "," & Range("g2") & " "
Print #1, "line " & Range("j2") & "," & Range("k2") & " " & Range("h2") & "," & Range("i2") & " " & Range("l2") & "," & Range("m2") & " "
Print #1, "text j br " & Range("f2") & "," & Range("g2") & " 2.0 60 " & Range("e2")
'               ※br                                      ※2.0 60
Print #1, "Clayer Line02"
Print #1, "circle " & Range("b3") & "," & Range("c3") & " 10"
Print #1, "dimradius " & Range("b3") - 10 & "," & Range("c3") & " " & Range("b3") + 10 & "," & Range("c3") - 10
Print #1, "line " & Range("b3") & "," & Range("c3") & " " & Range("f3") & "," & Range("g3") & " "
Print #1, "line " & Range("j3") & "," & Range("k3") & " " & Range("h3") & "," & Range("i3") & " " & Range("l3") & "," & Range("m3") & " "
Print #1, "text j br " & Range("f3") & "," & Range("g3") & " 2.0 60 " & Range("e3")
'               ※br                                      ※2.0 60
Print #1, "Clayer Line03"
Print #1, "circle " & Range("b4") & "," & Range("c4") & " 10"
Print #1, "dimradius " & Range("b4") - 10 & "," & Range("c4") & " " & Range("b4") + 10 & "," & Range("c4") - 10
Print #1, "line " & Range("b4") & "," & Range("c4") & " " & Range("f4") & "," & Range("g4") & " "
Print #1, "line " & Range("j4") & "," & Range("k4") & " " & Range("h4") & "," & Range("i4") & " " & Range("l4") & "," & Range("m4") & " "
Print #1, "text j br " & Range("f4") & "," & Range("g4") & " 2.0 60 " & Range("e4")
'               ※br                                      ※2.0 60

上がエクセルの座標計算から描いた寸法値、下がAutoCADから入れた寸法値。
エクセルで描いた方が自由度が高いと思いませんか?
エクセルで作れば、寸法値が他と重なってしまうときは寸法線の長さを縮めるとか、寸法線を左側に出すとか、自由に対処が可能になります。

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