日だまりのエクセルと蝉しぐれ

エクセルは感動の連続、
蝉しぐれへの想い…懐かしき 日本の心 蝉しぐれ

ペンタゴンボールの型紙 ~ エクセルVBAで正五角形を作図してみました

2012年10月23日 | エクセル
パッチワークで使うペンタゴンボールの型紙をExcelVBAで作図する方法をご紹介します。

エクセルのマクロで作図する方法は、基本図形から作図する方法に比べると短時間で正確に作成できる点がメリットと思います。
とは言え、プログラムが必要になりますので、敷居の高い方もおられると思いますが、一度プログラムしてしまえば何時でも簡単に任意の大きさの正五角形が作図できますので是非挑戦してみてください。

※Excelの基本図形から作図する方法
ペンタゴンボールの型紙 ~ エクセルで正五角形を作ってみました(2012年01月27日)
ペンタゴンボールの型紙 ~ エクセルで正五角形を作ってみましたPart2(2012年10月11日)

今回は、正五角形に外接する円を五等分し、各点を結んで正五角形を作図するマクロをご紹介します。



1.標準モジュールに下記のVBAコード(プログラム)を貼り付けてください。
 留意点は、角度計算にラジアンを使うこと、cm(mm)をポイントに変換して作図することの2点です。
 ※VBAコードには、私の備忘録として多くのコメント(注釈)をつけました。
'ここから---------------------------------------------------------------------
Option Explicit
Sub 一辺がaの正5角形()
Dim 正5角形 As Object
Dim a, r, s, 中心のX座標, 中心のY座標, x座標, y座標 As Double
'a = 一辺の長さ r = 正5角形に外接する円の半径 s = 開始角度
Const PAI As Double = 3.14159265358979
'円周率 = PAI
'円周率は PAI = 4 * Atn(1) 又は
'ワークシート関数から PAI = Application.WorksheetFunction.Pi PAI = WorksheetFunction.Pi() で求めることもできます
If MsgBox("選択したセルの左上を中心に正5角形を作図しますか?", vbYesNo) = vbNo Then Exit Sub
' 一辺がaの正5角形に外接する円の半径rを求める公式 … r=a/2sin(180/5)
a = Application.InputBox("一辺の長さは(cm単位、例4.5)", Type:=1) '数値を受け取る(数値以外は受け取れない)
r = a / (2 * Sin(PAI / 5))
r = r * 10 * 72 / 25.4 'ポイントへ変換… 1ポイント = 1インチ ÷ 72 = 25.4mm ÷ 72 = 0.353mm
'ラジアンの計算 360°= 2 * PAI 90°= PAI / 2 360°を5等分した角度 = 2 * PAI / 5
s = PAI / 2 - 2 * PAI / 5 '18°
'選択セルの左上位置が中心座標
With ActiveCell
中心のX座標 = .Left
中心のY座標 = .Top
End With
'正5角形作図 (for next 配列を使って簡略化できます)
'点0
x座標 = Cos(2 * PAI * 0 / 5 - s) * r + 中心のX座標
y座標 = Sin(2 * PAI * 0 / 5 - s) * r + 中心のY座標
Set 正5角形 = ActiveSheet.Shapes.BuildFreeform(msoEditingCorner, x座標, y座標)
'点1
x座標 = Cos(2 * PAI * 1 / 5 - s) * r + 中心のX座標
y座標 = Sin(2 * PAI * 1 / 5 - s) * r + 中心のY座標
正5角形.AddNodes msoSegmentLine, msoEditingCorner, x座標, y座標
'点2
x座標 = Cos(2 * PAI * 2 / 5 - s) * r + 中心のX座標
y座標 = Sin(2 * PAI * 2 / 5 - s) * r + 中心のY座標
正5角形.AddNodes msoSegmentLine, msoEditingCorner, x座標, y座標
'点3
x座標 = Cos(2 * PAI * 3 / 5 - s) * r + 中心のX座標
y座標 = Sin(2 * PAI * 3 / 5 - s) * r + 中心のY座標
正5角形.AddNodes msoSegmentLine, msoEditingCorner, x座標, y座標
'点4
x座標 = Cos(2 * PAI * 4 / 5 - s) * r + 中心のX座標
y座標 = Sin(2 * PAI * 4 / 5 - s) * r + 中心のY座標
正5角形.AddNodes msoSegmentLine, msoEditingCorner, x座標, y座標
'点5
x座標 = Cos(2 * PAI * 5 / 5 - s) * r + 中心のX座標
y座標 = Sin(2 * PAI * 5 / 5 - s) * r + 中心のY座標
正5角形.AddNodes msoSegmentLine, msoEditingCorner, x座標, y座標
正5角形.ConvertToShape.Select
With Selection
.Placement = xlMove 'セルに合わせて移動するがサイズ変更はしない
.ShapeRange.LockAspectRatio = msoTrue '図形の縦横の比率を固定
.ShapeRange.Fill.Visible = msoFalse '塗りつぶしなし
.ShapeRange.Name = "正5角形" '図形の名前
.ShapeRange.Line.Weight = 0.75 '線の太さ
.ShapeRange.Line.ForeColor.ObjectThemeColor = msoThemeColorText1 '線の色=黒
End With
End Sub
'ここまで---------------------------------------------------------------------


2.正五角形に外接する円の中心となる位置のセルを選択します。
 作成する正五角形の大きさにもよりますが、「I30」前後のセルを選択します。
3.マクロを実行すると、作成する正五角形の一辺の長さを入力する画面が表示されますので、任意の大きさを入力します。例えば5.5cm(55mm)の場合は5.5と入力します。
4.選択したセルの左上を中心とした正五角形が作図されます。
 ※目印として選択したセルを薄緑色にしました。
 ・底辺が水平になるように作図を18°から始めます。
 ・以下、時計回りで 72°(360°÷ 5)ごとに外接円の交点の座標を求めます。



5.作図した正五角形はワードで印刷した方が、寸法通りに印刷されます。
エクセルで印刷する場合は、拡大印刷が必要です。(我が家のプリンターは109%で寸法通りです)
パッチワークの型紙印刷は、エクセルそれともワード ~ 餅屋は餅屋で役割分担


最新の画像もっと見る

コメントを投稿