excel VBAにて図形を描写したいと考えております。
葉のような形(葉脈も含む)を乱数的に散りばめて描写してのです。
現在、下のようなコードで葉の形は作れることが分かったのですが(数値はまだ未定)、葉脈のような線を同時に描くこと、また乱数的に散りばめることが可能でしょうか?
詳しい方がいましたら教えていただきたいです。
Sub フリーフォームでなめらか図形1() With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 50, 55) .AddNodes msoSegmentCurve, msoEditingAuto, 40, 30 .AddNodes msoSegmentCurve, msoEditingAuto, 80, 30 .AddNodes msoSegmentCurve, msoEditingAuto, 80, 50 .AddNodes msoSegmentCurve, msoEditingAuto, 50, 55 .ConvertToShape.Select End With End Sub
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
mako1972さんにリクエストされたので作ってみました。
ただmako1972さんも言っていますが、葉っぱの書き方は人それぞれで、図形を組み合わせていかにそれっぽく見せるかだと思います。
マクロの記録を使ってフリーフォームで書けばまあそれなりの見た目のはできると思いますが、ここに載せるにはやたら細かい座標で膨大なデータになってしまうので諦めました。
なので今回は楕円と線だけで書いています。
あとは1枚描いた葉っぱをグループ化して、複製して使いまわしています。
求めているものとは異なると思いますので、参考程度でお願いします。
VBA
1Sub sample() 2 3 Dim i As Long 4' Dim r As Long 5 6 Shapes.SelectAll 7 Selection.Delete 8 9 Call leaf 10 11 Shapes("leaf").Cut 12 13 For i = 1 To 10 14 Paste 15 With Selection.ShapeRange 16 .Left = Int(Rnd * 500) 17 .Top = Int(Rnd * 500) 18 .Width = 30 + Int(Rnd * 20) 19 .Height = 40 + Int(Rnd * 50) 20 .Rotation = Int(Rnd * 360) 21' r = Int(Rnd * 3) ' 左右または上下反転させる処理 今回は左右対称の絵なので使ってません 22' If r <> 2 Then tmp.Flip r 23 End With 24 Next 25 26End Sub 27 28Sub leaf() 29 30 Shapes.AddShape msoShapeOval, 180, 60, 40, 60 31 Shapes.AddConnector msoConnectorStraight, 200, 60, 200, 130 32 Shapes.AddConnector msoConnectorStraight, 200, 80, 190, 70 33 Shapes.AddConnector msoConnectorStraight, 200, 80, 210, 70 34 Shapes.AddConnector msoConnectorStraight, 200, 95, 185, 85 35 Shapes.AddConnector msoConnectorStraight, 200, 95, 215, 85 36 Shapes.AddConnector msoConnectorStraight, 200, 110, 185, 100 37 Shapes.AddConnector msoConnectorStraight, 200, 110, 215, 100 38 39 Shapes.SelectAll 40 41 With Selection.ShapeRange.Line 42 .ForeColor.RGB = RGB(0, 0, 0) 43 End With 44 With Selection.ShapeRange.Fill 45 .ForeColor.RGB = RGB(146, 208, 80) 46 End With 47 48 Selection.ShapeRange.Group.Name = "leaf" 49 50End Sub 51 52
投稿2020/08/04 05:37
総合スコア17000
0
前のレスでも回答させていただいた通り、Excel VBAでの図形描画は推奨していませんが。。
素人ながら
ご提示されている葉っぱの法則性を関数化してみました。
適当かもしれませんが、このように関数化して、描画位置を乱数を発生させればいけるかもしれませんね。一応、3つの葉っぱが、指定座標に表示されます。
VBA
1Sub 図形作成() 2'呼び出し側 3Call zukei(50, 55)'ここのX,Yを乱数化 4Call zukei(40, 80)'ここのX,Yを乱数化 5Call zukei(80, 100)'ここのX,Yを乱数化 6End Sub 7 8Sub zukei(a As Integer, b As Integer) 9'描画関数 10Dim size_a As Integer 11Dim size_b As Integer 12 13siza_a = a 14size_b = b 15 16 17 With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, siza_a, size_b) 18 .AddNodes msoSegmentCurve, msoEditingAuto, siza_a - 10, size_b - 25 19 .AddNodes msoSegmentCurve, msoEditingAuto, siza_a + 30, size_b - 25 20 .AddNodes msoSegmentCurve, msoEditingAuto, siza_a + 30, size_b - 5 21 .AddNodes msoSegmentCurve, msoEditingAuto, siza_a, size_b 22 .ConvertToShape.Select 23 End With 24 25 26 27End Sub
投稿2020/08/01 10:22
編集2020/08/01 10:28総合スコア383
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/01 10:42
2020/08/01 11:02 編集
2020/08/01 11:03
2020/08/01 11:19 編集
2020/08/01 22:59
2020/08/03 01:31
2020/08/03 01:37
2020/08/03 06:49 編集
2020/08/03 23:57 編集
2020/08/03 06:52 編集
2020/08/03 09:25
2020/08/03 12:24
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/04 06:01
2020/08/04 06:33
2020/08/04 06:42 編集
2020/08/04 06:38
2020/08/04 06:41