【Word VBA】千鳥模様描画マクロ▽ソースコード

記事
IT・テクノロジー


HC2211036.png

Option Explicit
Option Base 0
'
Public Sub 千鳥模様描画マクロ()
    Const CHIDLEFT = 80         '描画開始位置X
    Const CHIDTOPP = 90            '      Y
    '
    Const CHIDVSPC = 80              '横-間隔
    Const CHIDHSPC = 70          '縦-間隔
    '
    Const CHIDCOLS = 4             '横/描画数
    Const CHIDROWS = 4                        '縦/描画数
    '
    Const CHIDBZM1 = 0.4                      'ベジェ曲線描画倍率
    Const CHIDBZM2 = CHIDBZM1
    '
    Const CHIDLFDX = 80 * CHIDBZM1    '千鳥足1相対位置
    Const CHIDLFDY = 10 * CHIDBZM1
    Const CHIDRFDX = 56 * CHIDBZM1    '千鳥足2相対位置
    Const CHIDRFDY = 50 * CHIDBZM1
    '
    Const CHIDEYSZ = 20 * CHIDBZM1     '千鳥目玉大きさ
    Const CHIDEYDX = -30 * CHIDBZM1   '千鳥目玉相対位置
    Const CHIDEYDY = -36 * CHIDBZM1
    '
    Const CHIDBSWD = 20 * CHIDBZM1    '千鳥の胸の大きさ
    Const CHIDBSHT = 50 * CHIDBZM1
    Const CHIDBSDX = 25 * CHIDBZM1     '千鳥の胸相対位置
    Const CHIDBSDY = -15 * CHIDBZM1
   '
    Const CHIDLNWE = 1                           '線の太さ
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim Kp As Integer, Lp As Integer
    Dim intDxp As Integer, intDyp As Integer
    Dim intExp As Integer, intEyp As Integer
    Dim lngCol(2) As Long
    Dim varBz1 As Variant, varBz2 As Variant
    Dim sngBB1() As Single, sngBB2() As Single
    Dim sngBD1() As Single, sngBD2() As Single
    Dim sngLT1(1) As Single
    '
    '** 千鳥の身体のベジェ曲線データ
    varBz1 = Array( _
76.21, 28.51, 76.18, 30.27, 73.07, 35.23, 71.5, 37.93, 69.93, 40.63, 69.27, 41.86, 66.79, 44.72, 64.31, 47.57, 60.13, 52.48, 56.62, 55.08, 53.1, 57.69, 49.11, 59.13, 45.69, 60.36, 42.27, 61.58, 39.25, 62.09, 36.08, 62.43, 32.91, 62.78, 30.18, 62.59, 26.66, 62.43, 23.14, 62.28, 18.27, 61.99, 14.98, 61.49, 11.68, 60.99, 9.13, 59.48, 6.87, 59.42, 4.61, 59.35, 3.86, 59.98, 1.41, 61.11, -1.04, 62.24, -7.82, 66.2, -7.82, 66.2, -10.84, 67.77, -13.13, 69.19, -16.68, 70.54, -20.23, 71.89, -24.66, 73.58, -29.11, 74.31, -33.57, 75.03, -39.04, 75.44, -43.44, 74.87, -47.83, 74.31, -51.76, 72.67, -55.49, 70.91, -59.23, 69.16, -62.78, 66.61, -65.86, 64.32, -68.93, 62.02, -72.48, 58.69, -73.96, 57.16, -75.44, 55.62, -76.24, 56.73, -74.71, 55.08, -73.18, 53.43, -68.07, 49.93, -64.77, 47.26, -61.47, 44.59, -56.85, 41.15, -54.93, 39.06, -53.01, 36.97, -53.58, 36.33, -53.23, 34.73, -52.89, 33.13, -52.57, 31.18, -52.86, 29.45, -53.14, 27.72, -54.11, 26.43, -54.93, 24.36, -55.75, 22.29, -57.76, 17.01, -57.76, 17.01, -58.95, 13.9, -61.49, 10.54, -62.09, 5.7, -62.69, 0.86, -62.78, -6.42, -61.33, -12.01, -59.89, -17.61, -57.03, -23.34, -53.42, -27.85, -49.81, -32.36, -44.97, -36.44, -39.67, -39.08, -34.36, -41.72, -26.89, -42.35, -21.95, -42.92, -17.02, -43.5, -12.82, -42.23, -10.08, -42.55, -7.35, -42.86, -6.99, -43.29, -5.56, -44.81, -4.13, -46.33, -2.42, -49.15, -1.51, -51.66, -0.6, -54.18, -0.41, -56.28, -0.1, -59.89, 0.22, -63.49, -0.7, -71.11, 0.37, -73.27, 1.45, -75.44, 4.45, -72.99, 6.35, -72.88, 8.26, -72.77, 11.38, -71.7, 15.42, -69.41, 19.46, -67.12, 26.45, -63.89, 30.61, -59.13, 34.78, -54.37, 38.21, -46.32, 40.41, -40.85, 42.61, -35.38, 43.08, -31.87, 43.8, -26.34, 44.53, -20.81, 43.96, -13.05, 44.75, -7.68, 45.53, -2.31, 47.16, 2.25, 48.51, 5.89, 49.87, 9.53, 50.93, 11.42, 52.85, 14.18, 54.76, 16.95, 57.78, 20.59, 60.01, 22.48, 62.24, 24.36, 64.28, 24.68, 66.23, 25.49, 68.17, 26.31, 70.12, 27.06, 71.69, 27.38, 73.26, 27.69, 76.24, 26.75, 76.21, 28.51)
    '
    '** 千鳥の足のベジェ曲線データ
    varBz2 = Array( _
12.17, 0#, 11.34, 1.46, 8.03, 0.04, 6.39, 0.75, 4.76, 1.45, 3.68, 3.06, 2.35, 4.23, 1.02, 5.39, -1.21, 8.26, -2.53, 8.68, -3.86, 9.1, -6.25, 8.48, -5.59, 6.74, -4.94, 5#, 1.15, -0.54, 1.4, -1.75, 1.65, -2.96, -2.05, -1.34, -4.09, -0.5, -6.13, 0.33, -9.47, 3.16, -10.84, 3.25, -12.21, 3.33, -13.78, 1.64, -12.34, 0#, -10.9, -1.65, -6.52, -5.29, -2.19, -6.62, 2.14, -7.96, 8.99, -9.1, 11.39, -8#, 13.78, -6.9, 13#, -1.46, 12.17, 0#)
    '
    '*ベジェ曲線データ設定(千鳥の身体)
    ReDim sngBB1(UBound(varBz1, 1) \ 2, 1),  _
               sngBD1(UBound(varBz1, 1) \ 2, 1)
    For Kp = LBound(sngBB1, 1) To UBound(sngBB1, 1)
        sngBB1(Kp, 0) = CSng(varBz1(Kp * 2 + 0)) * CHIDBZM1 * -1
        sngBB1(Kp, 1) = CSng(varBz1(Kp * 2 + 1)) * CHIDBZM1 * -1
        If Kp = LBound(sngBB1, 1) Then
           sngLT1(0) = sngBB1(Kp, 0): sngLT1(1) = sngBB1(Kp, 1)
        Else
           If sngLT1(0) > sngBB1(Kp, 0) Then sngLT1(0) = sngBB1(Kp, 0)
           If sngLT1(1) > sngBB1(Kp, 1) Then sngLT1(1) = sngBB1(Kp, 1)
         End If
    Next Kp
    '*ベジェ曲線データ設定(千鳥の足)
    ReDim sngBB2(UBound(varBz2, 1) \ 2, 1),  _
               sngBD2(UBound(varBz2, 1) \ 2, 1)
    For Kp = LBound(sngBB2, 1) To UBound(sngBB2, 1)
        sngBB2(Kp, 0) = CSng(varBz2(Kp * 2 + 0)) * CHIDBZM2 * -1
        sngBB2(Kp, 1) = CSng(varBz2(Kp * 2 + 1)) * CHIDBZM2 * -1
    Next Kp
    lngCol(0) = vbBlack                  '←輪郭の線色
    lngCol(1) = vbYellow                '←身体の色
    lngCol(2) = vbWhite                 '←目などの色
    For Jp = 0 To CHIDROWS - 1
        intDyp = CHIDTOPP + CHIDHSPC * Jp
        For Ip = 0 To CHIDCOLS - IIf((Jp Mod 2) = 0, 1, 2)
            intDxp = CHIDLEFT + CHIDVSPC * Ip _
                   + (CHIDVSPC / 2) * (Jp Mod 2)
            '
            intExp = intDxp + Abs(sngLT1(0))
            intEyp = intDyp + Abs(sngLT1(1))
            For Kp = LBound(sngBB1, 1) To UBound(sngBB1, 1)
                sngBD1(Kp, 0) = sngBB1(Kp, 0) + intExp
                sngBD1(Kp, 1) = sngBB1(Kp, 1) + intEyp
            Next Kp
            '*ベジェ曲線描画(千鳥の身体)
            With ActiveDocument.Shapes.AddCurve(sngBD1)
                .Line.ForeColor.RGB = lngCol(0)
                .Fill.ForeColor.RGB = lngCol(1)
                .Line.Weight = CHIDLNWE
           End With
           '
           For Lp = 1 To 2
               For Kp = LBound(sngBB2, 1) To UBound(sngBB2, 1)
                   sngBD2(Kp, 0) = sngBB2(Kp, 0) + intExp _
                               + Choose(Lp, CHIDLFDX, CHIDRFDX)
                   sngBD2(Kp, 1) = sngBB2(Kp, 1) + intEyp _
                               + Choose(Lp, CHIDLFDY, CHIDRFDY)
               Next Kp
               '*ベジェ曲線描画(千鳥の足)
               With ActiveDocument.Shapes.AddCurve(sngBD2)
                   .Line.ForeColor.RGB = lngCol(0)
                   .Fill.ForeColor.RGB = lngCol(1)
                   .Line.Weight = CHIDLNWE
                   .Rotation = Choose(Lp, 15, 45)
               End With
           Next Lp
           '円形描画(千鳥の目玉)
           With ActiveDocument.Shapes.AddShape( _
                msoShapeOval, _
               intExp + CHIDEYDX - CHIDEYSZ / 2, _
               intEyp + CHIDEYDY - CHIDEYSZ / 2, _
               CHIDEYSZ, CHIDEYSZ)
               .Fill.ForeColor.RGB = lngCol(2)
               .Line.ForeColor.RGB = lngCol(0)
               .Line.Weight = CHIDLNWE
          End With
          '三日月描画(千鳥の胸)
           With ActiveDocument.Shapes.AddShape( _
                msoShapeMoon, _
               intExp + CHIDBSDX, _
               intEyp + CHIDBSDY, _
               CHIDBSWD, CHIDBSHT)
               .Fill.ForeColor.RGB = lngCol(2)
               .Line.ForeColor.RGB = lngCol(0)
               .Line.Weight = CHIDLNWE
               .Rotation = 210
               .Adjustments(1) = 0.3
          End With
        Next Ip
    Next Jp
End Sub

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