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

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

サッカーボールの型紙 ~ エクセルVBAで正六角形を作図します

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

サッカーボールは、正六角形 20枚と正五角形 12枚でできています。

正五角形の型紙をExcelVBAで作図する方法は、ペンタゴンボールの型紙 ~ エクセルVBAで正五角形を作図してみました(2012年10月23日)ペンタゴンボールの型紙 ~ エクセルVBAで正五角形を作図してみましたPart 2(2012年10月24日)でご紹介しています。

正六角形の型紙があればサッカーボールは完成します。
※Excelの基本図形から作図する方法
サッカーボールの型紙 ~ エクセルでひと手間かけて正六角形を作図します(2012年02月13日)

今回は、正六角形に外接する円を六等分し、各点を結んで正六角形を作図するマクロをご紹介します。
エクセルのマクロで作図する方法は、基本図形から作図する方法に比べると短時間で正確に作成できる点がメリットと思います。また、一度プログラムしてしまえば何時でも簡単に任意の大きさの正六角形が作図できます。



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


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



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

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 網目模様がやさしい万年カレ... | トップ | サッカーボールの型紙 ~ エ... »
最新の画像もっと見る

コメントを投稿

エクセル」カテゴリの最新記事