【Word VBA】笹の葉模様描画マクロ▽ソースコード

記事
IT・テクノロジー
HC221005A.png

Option Explicit
Option Base 0
'
Public Sub 笹の葉模様描画マクロ()
    Const BMBGLEFT = 90         '描画開始位置X
    Const BMBGTOPP = 80      '      Y
    '
    Const BMBGVSPC = 60              '横-間隔
    Const BMBGHSPC = 35              '縦-間隔
    '
    Const BMBGCOLS = 5                '横/描画数
    Const BMBGROWS = 5               '縦/描画数
    '
    Const BMBGBZMG = 1.2            'ベジェ倍率
    Const BMBGLNSP = (9 * BMBGBZMG)     '葉脈
    Const BMBGLNEP = (18 * BMBGBZMG)
    Const BMBGLNWT = 0.75           '線の太さ
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim Kp As Integer, Lp As Integer
    Dim intDxp As Integer, intDyp As Integer
    Dim sngBBs(6, 1) As Single, sngBDt(6, 1) As Single
    Dim varBez As Variant, sngRnd As Single
    Dim sngSin As Single, sngCos As Single
    Dim lngCol(1) As Long
    '
    '*笹の葉ベジェ曲線データ
    varBez = Array(0, 4.8, -5#, 5.3, -4.5, 13.8, 0#, _
                   24.6, 4.5, 13.8, 5#, 5.3, 0, 4.8)
    '*ベジェ曲線データ設定
    For Lp = LBound(sngBBs, 1) To UBound(sngBBs, 1)
        sngBBs(Lp, 0) = CSng(varBez(Lp * 2 + 0)) * BMBGBZMG
        sngBBs(Lp, 1) = CSng(varBez(Lp * 2 + 1)) * BMBGBZMG * -1
    Next Lp
    '
    sngRnd = (4 * Atn(1)) / 180
    lngCol(0) = RGB(0, 100, 0)               '←笹の葉の色
    lngCol(1) = vbGreen                         '←葉脈の色
    For Jp = 0 To BMBGROWS - 1
        intDyp = BMBGTOPP + BMBGHSPC * Jp
        For Ip = 0 To BMBGCOLS - IIf((Jp Mod 2) = 0, 1, 2)
            intDxp = BMBGLEFT _
                   + BMBGVSPC * Ip + (BMBGVSPC / 2) * (Jp Mod 2)
            '*笹の葉を3枚描画
            For Kp = 0 To 2
                sngSin = Sin(sngRnd * (120 + 60 * Kp))
                sngCos = Cos(sngRnd * (120 + 60 * Kp))
                For Lp = LBound(sngBDt, 1) To UBound(sngBDt, 1)
                   sngBDt(Lp, 0) = sngBBs(Lp, 0) * sngCos _
                          - sngBBs(Lp, 1) * sngSin + intDxp
                   sngBDt(Lp, 1) = sngBBs(Lp, 0) * sngSin _
                          + sngBBs(Lp, 1) * sngCos + intDyp
                Next Lp
               '*笹の葉描画
                With ActiveDocument.Shapes.AddCurve(sngBDt)
                    .Line.Visible = msoFalse
                    .Fill.Visible = msoTrue
                    .Fill.ForeColor.RGB = lngCol(0)
                End With
               '*笹の葉脈描画
                With ActiveDocument.Shapes.AddLine( _
                   intDxp + BMBGLNSP * sngSin, _
                   intDyp - BMBGLNSP * sngCos, _
                   intDxp + BMBGLNEP * sngSin, _
                   intDyp - BMBGLNEP * sngCos).Line
                  .ForeColor.RGB = lngCol(1)
                  .Weight = BMBGLNWT
               End With
            Next Kp
        Next Ip
    Next Jp
End Sub

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら