【Word VBA】足跡描画マクロ▽ソースコード

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

Option Explicit
Option Base 0
'
Public Sub 足跡描画マクロ()
    Const FTPRLFTL = 120             '左足-描画規準位置X
    Const FTPRLFTR = 200             '右足-描画規準位置X
    Const FTPRTOPL = 180            '左足-描画規準位置Y
    Const FTPRTOPR = 230            '右足-描画規準位置Y
    Const BEZIMAGN = 0.5            'ベジェ曲線データ倍率
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim intDxp As Integer, intDyp As Integer
    Dim intRad As Integer, intFht As Integer
    Dim varBez As Variant, lngCol As Long
    Dim sngBas(12, 1) As Single, sngDat(12, 1) As Single
    Dim sngRnd As Single, sngSit As Single
    '
    'ベジェ曲線データ(足の裏)設定
    varBez = Array(45, 92, 92, 50, 37, -5, 46, -56, 47, -101, -24, _
                 -136, -18, -58, 14, 35, -37, 2, -46, 77, -41, _
                 132, 12, 125, 45, 92)
    For Ip = LBound(sngBas, 1) To UBound(sngBas, 1)
        sngBas(Ip, 0) = CSng(varBez(Ip * 2 + 0)) * BEZIMAGN
        sngBas(Ip, 1) = CSng(varBez(Ip * 2 + 1)) * BEZIMAGN
    Next Ip
    '
    lngCol = RGB(105, 105, 105) '←塗りつぶし色
    sngRnd = (4 * Atn(1)) / 180
    '
    For Jp = 1 To 2 '1=左足, 2=右足
        intDxp = Choose(Jp, FTPRLFTL, FTPRLFTR)
        intDyp = Choose(Jp, FTPRTOPL, FTPRTOPR)
        '*ベジェ描画位置設定
        For Ip = LBound(sngBas, 1) To UBound(sngBas, 1)
            sngDat(Ip, 0) = Choose(Jp, -1, 1) _
                               * sngBas(Ip, 0) + intDxp
            sngDat(Ip, 1) = -1 * sngBas(Ip, 1) + intDyp
        Next Ip
        '*ベジェ描画(足の裏)
        With ActiveDocument.Shapes.AddCurve(sngDat)
            .Fill.Visible = msoTrue
            .Fill.ForeColor.RGB = lngCol
            .Line.Visible = msoFalse
        End With
        '
        '*楕円描画(足の指/親指(1)から)↓距離は基準値から
        intRad = CInt(Sqr(sngBas(10, 0) ^ 2 + sngBas(10, 1) ^ 2)) - 15
        For Ip = 1 To 5
            sngSit = sngRnd * IIf(Jp = 1, -55 - Ip * 15, -110 + Ip * 15)
            intFht = Choose(Ip, 20, 15, 12, 12, 12)     '指の長さ
            '*楕円描画
            With ActiveDocument.Shapes.AddShape(msoShapeOval, _
                 intRad * Cos(sngSit) + intDxp + IIf(Jp = 1, 0, -15), _
                 intRad * Sin(sngSit) + intDyp + IIf(Jp = 1, -6, -8) _
                                      - intFht, _
                 Choose(Ip, 12, 10, 8, 8, 8), intFht)
                .Fill.Visible = msoTrue
                .Fill.ForeColor.RGB = lngCol      '←塗りつぶし色
                .Line.Visible = msoFalse
                If Ip = 1 Then                        '親指だけを傾ける
                   .Rotation = IIf(Jp = 1, 8, -8)
                End If
            End With
        Next Ip
    Next Jp
End Sub

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