【Word VBA】撫子文様描画マクロ▽ソースコード

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

Option Explicit
Option Base 0
Public Sub 撫子文様描画マクロ()
   Const PINKLEFT = 120    '描画開始位置 X
    Const PINKTOPP = 100    '             Y
    Const PINKPLMG = 0.3    'ポリライン描画倍率
    '
    Const PINKVSPC = 50         '横-間隔
    Const PINKHSPC = 50         '縦-間隔
    Const PINKCOLS = 5           '横/描画数
    Const PINKROWS = 4          '縦/描画数
    '
    Const PINKLNWT = 1            '線の太さ
    Const PINKRADI = 26.1 + 8   '花びらの中心と
                                                '花の中心距離
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim Kp As Integer, Lp As Integer
    Dim intCxp As Integer, intCyp As Integer
    Dim intDxp As Integer, intDyp As Integer
    Dim lngCol As Long, sngRva As Single
    Dim varPly As Variant
    Dim sngBas() As Single, sngDat() As Single
    '
    '*ポリラインベースデータ
    varPly = Array(0#, -26.1, 4.8, -22.1, 7.7, -17.5, _
    11.8, -10.1, 15.5, -3.6, 22.1, 3.1, 25.8, 6.9, 27.9, _
    11.2, 28.4, 13.5, 27.3, 19.2, 25.7, 18.9, 21.4, 15.2, _
    20.4, 21.8, 19.9, 22.2, 14.1, 17.2, 13.5, 24.8, 12.7, _
    25#, 7.6, 19.3, 6.4, 26#, 4#, 27.9, 0.3, 21.2, 0#, 21.2, _
    0#, 21.2, -0.3, 21.2, -4#, 27.9, -6.4, 26#, -7.6, 19.3, _
    -12.7, 25#, -13.5, 24.8, -14.1, 17.2, -19.9, 22.2, -20.4, _
    21.8, -21.4, 15.2, -25.7, 18.9, -27.3, 19.2, -28.4, 13.5, _
    -27.9, 11.2, -25.8, 6.9, -22.1, 3.1, -15.5, -3.6, -11.8, _
    -10.1, -7.7, -17.5, -4.8, -22.1, 0#, -26.1)
    '
    ReDim sngBas((UBound(varPly, 1) - 1) \ 2, 1)
    ReDim sngDat((UBound(varPly, 1) - 1) \ 2, 1)
    For Ip = LBound(varPly, 1) To UBound(varPly, 1) Step 2
        sngBas(Ip \ 2, 0) = CSng(varPly(Ip + 0)) * PINKPLMG * -1
        sngBas(Ip \ 2, 1) = CSng(varPly(Ip + 1)) * PINKPLMG * -1
    Next Ip
'
    sngRva = ((4 * Atn(1)) / 180) * 72
    lngCol = RGB(255, 20, 147) '←花の色
    For Jp = 0 To PINKROWS - 1
        intCyp = PINKTOPP + PINKHSPC * Jp
        For Ip = 0 To PINKCOLS - IIf((Jp Mod 2) = 0, 1, 2)
            intCxp = PINKLEFT + PINKVSPC * Ip _
                   + (PINKVSPC \ 2) * (Jp Mod 2)
            '花びら5枚
            For Kp = 0 To 4
                intDxp = (PINKRADI * PINKPLMG) _
                       * Cos(sngRva * Kp) + intCxp
                intDyp = (PINKRADI * PINKPLMG) _
                       * Sin(sngRva * Kp) + intCyp
                For Lp = LBound(sngBas, 1) To UBound(sngBas, 1)
                   sngDat(Lp, 0) = sngBas(Lp, 0) + intDxp
                   sngDat(Lp, 1) = sngBas(Lp, 1) + intDyp
                Next Lp
                '*花びら(ポリライン)描画
                With ActiveDocument.Shapes.AddPolyline(sngDat)
                     .Fill.Visible = msoTrue
                     .Fill.ForeColor.RGB = IIf((Jp Mod 2) = 0, _
                                           vbWhite, lngCol)
                     .Line.Visible = msoTrue
                     .Line.ForeColor.RGB = IIf((Jp Mod 2) = 0, _
                                          lngCol, vbWhite)
                     .Line.Weight = PINKLNWT
                     .Rotation = 72 * Kp + 90
               End With
            Next Kp
        Next Ip
    Next Jp
End Sub

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す