【ごまかんぱちの挑戦】エクセルでAutoCADの自動作図(その10)
こんにちは。ごまかんぱちです。🐟
AutoCADの自動作図を目指して奮闘しています。
ついに 第10回に到達してしまいました。
色々な題材を扱って どこかで 何かしらで 引っ掛かってもらえたら と思います。
10-1. 鉄筋を曲げよう
こんな 曲げ鉄筋 ありますよね。ないかな?
今回の題材は 鉄筋の加工図です。
・・・ 円と円弧を扱うために ムリヤリやってます。
大丈夫。きっと役に立つはず!
始まりと終わりが直線で、複数個の半円が連なる形の鉄筋です。
エクセルで このように描きます。
まずは、単純に1つの円弧を描いてみましょう。
コードはこうなります。
Print #1, "arc c " & 0 & "," & -Range("G7") / 2 & " " & 0 & "," & 0 & " " & 0 & "," & -Range("G7")
そして 実行結果はこう。
円弧(半円)が できました。😊
円弧のコードの解説です。
では、本番です。
エクセル上に描いたような形の図形を描きます。
コードは こうなります。
Print #1, "line " & Range("E2") & "," & 0 & " " & 0 & "," & 0 & " "
Print #1, "arc c " & 0 & "," & -Range("G7") / 2 & " " & 0 & "," & 0 & " " & 0 & "," & -Range("G7")
Print #1, "arc c " & 0 & "," & -Range("G7") - Range("G7") / 2 & " " & 0 & "," & -Range("G7") * 2 & " " & 0 & "," & -Range("G7")
Print #1, "line " & 0 & "," & -Range("G7") * 2 & " " & -Range("B9") & "," & -Range("G7") * 2 & " "
1行目と4行目が 上下の直線、2行目と3行目が円弧2つを表しています。
実行結果はこう。
順調です。😊
続いて 半円がいくつ続いても 対応できるようにしましょう。
まず、セルI7に個数を入力できるようにします。
続いて コードです。
・for文で 半円を連ねる。
・if文で 奇数番目と偶数番目を場合分けして 半円の向きを整える。
という方針で書きます。
'◆外形
Print #1, "clayer Layer1" '画層の指定
Print #1, "line " & Range("E2") & "," & 0 & " " & 0 & "," & 0 & " "
For i = 1 To Range("I7")
If i Mod 2 = 1 Then '上から奇数番目の半円
Print #1, "arc c " & 0 & "," & -(i - 0.5) * Range("G7") & " " & 0 & "," & -(i - 1) * Range("G7") & " " & 0 & "," & -i * Range("G7")
Else '上から偶数番目の半円
Print #1, "arc c " & 0 & "," & -(i - 0.5) * Range("G7") & " " & 0 & "," & -i * Range("G7") & " " & 0 & "," & -(i - 1) * Range("G7")
End If
Next
If Range("I7") Mod 2 = 1 Then '半円の数が奇数のとき
Print #1, "line " & 0 & "," & -Range("I7") * Range("G7") & " " & Range("B9") & "," & -Range("I7") * Range("G7") & " "
Else '半円の数が偶数のとき
Print #1, "line " & 0 & "," & -Range("I7") * Range("G7") & " " & -Range("B9") & "," & -Range("I7") * Range("G7") & " "
End If
できました。😊
個数を変えてみて、奇数個 偶数個 どちらの場合でも 正しく動くことを確認しましょう。
個数を100個とかにして 遊んでみたり。
続いて 鉄筋長を算出してみましょう。
鉄筋長は、
・最初の直線
・半円の長さ × 個数
・最後の直線
の合計で決まります。
'鉄筋長
Length1 = Range("E2") + 3.14 * Range("G7") / 2 * Range("I7") + Range("B9")
Print #1, "clayer Layer2" '画層の指定
Print #1, "text j M " & 0 & "," & -Range("I7") * Range("G7") - 100 & " " & 35 & " " & 0 & " " & "S1"
Print #1, "text j ML " & 75 & "," & -Range("I7") * Range("G7") - 100 & " " & 35 & " " & 0 & " " & "D" & Range("I10") & "×" & Length1 & " [mm]"
Print #1, "circle " & 0 & "," & -Range("I7") * Range("G7") - 100 & " " & 35
コードはこうなります。
半円の長さを求めるために 円周率πが必要なのですが、VBAでは、πの表現が何やら面倒なので、一旦「3.14」で計算しています。
πについての詳しい話は 後ほど。
実行結果はこちら。
できました。😊
立派な 鉄筋加工図です。
適当に決めた 鉄筋記号「S1」を 丸で囲むために、円を使いました。
円の解説です。
これで 円と円弧が登場しましたので、今回の目的は達成されました。😁
あと少し やることがあります。
・VBAにおけるπを考える
・鉄筋の重量を算出して表示する
・鉄筋径を考慮した図を描く
まだまだ 頑張ります。
ぜひ 続きも読んでください。
10-2. アドバンス
さあ、もう一段階 進んでいきます。
・VBAにおけるπを考える
エクセルであれば、セルに「=PI()」と入力すれば πになるのですが、VBAには そんな関数は用意されていないのです。イジワルですね。
ここから先は
¥ 300
「役に立った!」「助かった!」と感じたらサポートいただけると嬉しいです。😊