【Word VBA】つた家紋描画マクロ▽ソースコード

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

Option Explicit
Option Base 0
'
Public Sub つた家紋描画マクロ()
    Const IVYSLEFT = 150          '*描画開始位置X
    Const IVYSTOPP = 150     '        Y
    '
    Const IVYSYOPS = 180             '*円弧描画Y位置補正値
    Const IVYSCRAD = 8                '*真ん中の丸半径
    Const IVYSLNWE = 4               '*線の太さ
    '---------------------------------------------------------------------------
    Dim Ip As Integer
    Dim Kp As Integer, Lp As Integer
    Dim intDxp As Integer, intDyp As Integer
    Dim lngCol(1) As Long
    Dim sngBBas() As Single, sngBDat() As Single
    Dim varBezi As Variant
    Dim sngABas() As Single, sngADat() As Single
    Dim varArcL As Variant
    '
    '*外形輪郭ベジェ曲線データ
    varBezi = Array(70.3, -7.46, 70.38, -30.21, 70.51, -33.6, 70.99, -39.8, 71.47, -46#, 72.28, -43.35, 73.2, -44.66, 74.12, -45.97, _
    76.03, -47.13, 77.9, -48#, 79.78, -48.87, 82.25, -49.75, 84.45, -49.87, 86.65, -49.99, 88.9, -48.04, 91.11, -48.73, 93.32, -49.41, 95.15, -52.59, 97.71, -53.99, 100.27, -55.38, 102.91, -57.05, 106.48, -57.11, 110.04, -57.17, 115.73, -55.95, 119.11, -54.32, 122.48, -52.7, 124.85, -49.63, 126.73, -47.36, 128.61, -45.1, 128.81, -42.17, 130.38, -40.73, 131.95, -39.29, 134#, -39.75, 136.14, -38.71, 138.28, -37.66, 140.87, -36.67, 143.23, -34.46, 145.58, -32.26, _
148.91, -28.58, 150.26, -25.46, 151.61, -22.34, 151.39, -18.29, 151.33, -15.75, 151.27, -13.21, 148.82, -12.14, 149.91, -10.22, 151#, -8.31, 155.79, -6.44, 157.87, -4.27, 159.95, -2.1, 161.42, -0.09, 162.4, 2.78, 163.38, 5.65, 162.81, 10.4, 163.76, 12.94, 164.7, 15.48, 166.81, 15.66, 168.06, 18.02, 169.32, 20.38, 171.14, 23.7, 171.28, 27.09, 171.43, 30.49, 170.31, 35.53, 168.94, 38.39, 167.56, 41.26, 164.51, 41.97, 163.04, 44.28, 161.58, 46.58, 161.41, 49.86, 160.16, 52.24, 158.91, 54.62, 157.66, 56.94, 155.54, 58.55, 153.42, 60.16, 150.05, 61.38, 147.44, 61.9, 144.82, 62.43, _
142.03, 62#, 139.87, 61.7, 137.71, 61.39, 136.09, 59.59, 134.47, 60.08, 132.85, 60.57, 131.84, 63.38, 130.16, 64.61, 128.47, 65.83, 126.27, 67.04, 124.35, 67.44, 122.44, 67.84, 119.66, 67.16, 118.65, 67.01, 117.63, 66.87, 118.8, 66.34, 118.26, 66.58, 117.71, 66.83, 116.07, 67.6, 115.39, 68.48, 114.72, 69.36, 114.87, 71.39, 114.05, 73#, 113.22, 74.61, 111.97, 76.47, 110.46, 78.13, 108.95, 79.8, 105.89, 81.36, 104.99, 82.99, 104.09, 84.62, 105.32, 86.16, 105.08, 87.91, 104.85, 89.67, 104.36, 91.9, 103.57, 93.52, 102.79, 95.14, 101.85, 96.41, 100.39, 97.63, 98.93, 98.86, _
96.97, 100.32, 94.81, 100.88, 92.64, 101.44, 89.99, 99.91, 87.38, 101#, 84.78, 102.1, 81.87, 106.06, 79.19, 107.46, 76.52, 108.86, 73.46, 109.38, 71.35, 109.43, 69.24, 109.48, 66.4, 109.43, 66.55, 107.75, 66.71, 106.08, 69.86, 115.87, 70.48, 96.67, 71.11, 77.47, 70.21, 15.28, 70.3, -7.46)
    '*葉脈円弧描画データ
    varArcL = Array( _
      -0.25, 165.05, 92.75, 40.6, -164.61, -16.21, 353.11, _
     2.3, 140.95, 61.55, 40.3, -164.85, -8.64, 311.46, _
     11.55, 146.3, 55.8, 36.3, -156.03, -5.4, 318.34, _
     24.15, 150.6, 49.6, 28.6, -172.45, -6.85, 342.85, _
     30.9, 156.55, 44.4, 26.1, -156.03, -4.1, 345.53, _
     -25.9, 196.4, 122.05, 71.8, -165.04, -36.25, 41.97, _
     7.55, 179.4, 103.75, 66.05, -165.04, -52.39, 20.17, _
     20.45, 190.9, 91.55, 50.1, -173.88, -50.49, 32.38, _
     24.55, 198.55, 80.3, 48.9, -166.97, -55.29, 38.91, _
     11.65, 215.65, 103.75, 62.2, -166.37, -100.63, 62.66, _
     33.95, 187.25, 93.95, 45.2, 63.56, 144.57, 56.3, _
     29.7, 182#, 75.55, 45.75, 40.52, 144.57, 60.84, _
     16.3, 191#, 86.1, 43.2, 40.84, 161.8, 56.3, _
     -52.6, 207.65, 122.7, 76.55, -167.8, -69.48, 72.67, _
     -57.55, 210.05, 109.45, 81.6, -167.8, -79.17, 83.3, _
     -61.3, 221.3, 107.25, 76.5, -165.62, -80.97, 86.37, _
     -51.5, 243#, 94.95, 49.95, -178.74, -90.16, 95.37, _
     -47.5, 250.15, 82.9, 35.5, -169.26, -69.48, 90#, _
     4.15, 187.1, 110.4, 48.8, 157.53, 165.02, 46.73)
    '
    '*ベジェ曲線データ設定
    ReDim sngBBas(UBound(varBezi, 1) \ 2, 1)
    ReDim sngBDat(UBound(varBezi, 1) \ 2, 1)
    For Kp = LBound(sngBBas, 1) To UBound(sngBBas, 1)
        sngBBas(Kp, 0) = CSng(varBezi(Kp * 2 + 0)) - 70.3
        sngBBas(Kp, 1) = CSng(varBezi(Kp * 2 + 1))
    Next Kp
    '
    '*円弧描画データ設定
    ReDim sngABas(18, 6), sngADat(18, 6)
    For Kp = 0 To 18
        For Ip = 0 To 6
            sngABas(Kp, Ip) = CSng(varArcL(Kp * 7 + Ip))
        Next Ip
        sngABas(Kp, 0) = sngABas(Kp, 0) + 0
    Next Kp
    '
    intDxp = IVYSLEFT: intDyp = IVYSTOPP
    lngCol(0) = vbWhite                  '←線の色
    lngCol(1) = RGB(0, 0, 128)        '←塗りつぶし色
    '
    For Lp = 0 To 1                          '0:右側 1:左側
        '*ベジエ曲線位置設定
        For Kp = LBound(sngBBas, 1) To UBound(sngBBas, 1)
            sngBDat(Kp, 0) = _
            IIf(Lp = 0, sngBBas(Kp, 0) + intDxp, intDxp - sngBBas(Kp, 0))
            sngBDat(Kp, 1) = sngBBas(Kp, 1) + intDyp
        Next Kp
        '
        '*ベジエ曲線描画
        With ActiveDocument.Shapes.AddCurve(sngBDat)
             .Line.Visible = msoFalse
             .Fill.Visible = msoTrue
             .Fill.ForeColor = lngCol(1)
        End With
        '
        '*円弧描画
        For Kp = 0 To 18
            With ActiveDocument.Shapes.AddShape(msoShapeArc, _
                IIf(Lp = 0, sngABas(Kp, 0) + intDxp, _
                    (intDxp + 0) - sngABas(Kp, 0) - sngABas(Kp, 2)), _
                sngABas(Kp, 1) + intDyp - IVYSYOPS, _
                sngABas(Kp, 2), sngABas(Kp, 3))
               .Adjustments(1) = sngABas(Kp, 4)
               .Adjustments(2) = sngABas(Kp, 5)
               .Rotation = sngABas(Kp, 6)
               .Line.ForeColor = lngCol(0)
               .Line.Weight = IVYSLNWE
               If Lp = 1 Then .Flip msoFlipHorizontal
           End With
        Next Kp
    Next Lp '
    '
    '*中心線描画
    With ActiveDocument.Shapes.AddLine( _
         intDxp + 0, intDyp - 45, _
         intDxp + 0, intDyp + 100).Line
            .ForeColor.RGB = lngCol(0)       '←線色
            .Weight = IVYSLNWE                '←線の太さ
            .DashStyle = msoLineSolid        '←線のスタイル
   End With
   '
   '中心の丸描画
   With ActiveDocument.Shapes.AddShape(msoShapeOval, _
       intDxp - IVYSCRAD, intDyp - IVYSCRAD, _
       IVYSCRAD * 2, IVYSCRAD * 2)
       .Fill.Visible = msoTrue
       .Fill.ForeColor.RGB = lngCol(1)
       .Line.Visible = msoTrue
       .Line.ForeColor.RGB = lngCol(0)
      .Line.Weight = IVYSLNWE
   End With
End Sub


蛇足
 つた家紋は、作者の家の家紋でもある。

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