【Word VBA】輪違い麻の葉文様描画マクロ▽ソースコード

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

Option Explicit
Option Base 0
Public Sub 輪違い麻の葉文様描画マクロ()
    Const RIMILEFT = 125    '描画開始位置X
    Const RIMITOPP = 120   '      Y
    Const RIMIBEZA = 1     'ベジェ曲線倍率
   '
    Const RIMICOLS = 8     '描画列数
    Const RIMIROWS = 5      '描画行数
    Const RINISPAC = 5        '間隔
    '
    Const RIMILBWE = 1.5   '線の太さ
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim Kp As Integer, Lp As Integer
    Dim varBezi As Variant, sngBBas(2, 3, 1) As Single
    Dim sngBDat(3, 1) As Single, intLen As Integer
    Dim intHei As Integer, intMhe As Integer
    Dim dblRad As Double, dblSit As Double
    Dim intCxp As Integer, intCyp As Integer
    Dim lngCol As Long
    '
    'ベジェ曲線データ
    varBezi = Array(0, 0, 9.2, -15.8, 22.8, -15.8, 32#, 0)
    'ベジェ曲線基データ作成
    For Ip = LBound(varBezi, 1) To UBound(varBezi, 1) Step 2
        sngBBas(0, Ip \ 2, 0) = CSng(varBezi(Ip + 0)) * RIMIBEZA
        sngBBas(0, Ip \ 2, 1) = CSng(varBezi(Ip + 1)) * RIMIBEZA
    Next Ip
'
    '-60° -120°の回転ベジェ曲線基データ作成
    dblRad = ((4 * Atn(1)) / 180)
    For Jp = 1 To 2
        dblSit = -60 * Jp * dblRad
        For Ip = 0 To 3
            sngBBas(Jp, Ip, 0) = _
            (sngBBas(0, Ip, 0)) * Cos(dblSit) _
          - ((sngBBas(0, Ip, 1) * IIf(Jp = 1, -1, 1))) * Sin(dblSit)
            sngBBas(Jp, Ip, 1) = _
            (sngBBas(0, Ip, 0)) * Sin(dblSit) _
          + ((sngBBas(0, Ip, 1) * IIf(Jp = 1, -1, 1))) * Cos(dblSit)
        Next Ip
    Next Jp
    '
    lngCol = RGB(0, 139, 139)   '←線色
    intLen = CInt(sngBBas(0, 3, 0) - sngBBas(0, 0, 0))
    intHei = CInt(intLen * Sqr(3) / 2)
    intMhe = CInt(intHei * -1 * Sqr(3) / 4)
    For Jp = 0 To RIMIROWS - 1
        intCyp = RIMITOPP + (intHei + RINISPAC) * Jp
        For Ip = 0 To RIMICOLS - 1
           intCxp = RIMILEFT + (intLen \ 2 + RINISPAC) * Ip
            For Kp = 0 To 2
                For Lp = 0 To 3
                    sngBDat(Lp, 0) = sngBBas(Kp, Lp, 0) _
                                          + intCxp + IIf(Kp = 2, intLen, 0)
                    sngBDat(Lp, 1) = sngBBas(Kp, Lp, 1) + intCyp _
                             + IIf((Ip + Jp) Mod 2 = 1 And Kp = 0, intMhe, 0)
                Next Lp
            'ベジエ曲線描画
                With ActiveDocument.Shapes.AddCurve(sngBDat)
                    .Fill.Visible = msoFalse
                    .Line.Visible = msoTrue
                    .Line.ForeColor.RGB = lngCol       '←線色
                    .Line.Weight = RIMILBWE     '←線の太さ
                    If (Ip + Jp) Mod 2 = 1 Then .Flip msoFlipVertical
               End With
            Next Kp
        Next Ip
    Next Jp
End Sub

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