【Word VBA】渦巻描画マクロ▽ソースコード

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

Public Sub 渦巻描画マクロ()
    Const SWIRCXPS = 200       '描画の中心位置 X
    Const SWIRCYPS = 200       '                Y
    Const SWIRSRAD = 20        '開始半径
    Const SWIRRECT = 5                      '中心点のズレ
    Const SWIRCONT = 3                     '巻き数
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim intCxp As Integer, intCyp As Integer, intRad As Integer
    Dim intSxp As Integer, intSyp As Integer
    Dim sngAng As Single
    '
    intRad = SWIRSRAD: sngAng = 0
    For Ip = 0 To SWIRCONT * 4 - 1
        Jp = Ip Mod 4
        intCxp = SWIRCXPS + SWIRRECT * Choose(Jp + 1, -1, -1, 1, 1)
        intCyp = SWIRCYPS + SWIRRECT * Choose(Jp + 1, 1, -1, -1, 1)
        If Ip > 0 And (Ip Mod 4) = 0 Then intRad = intRad  _
                                                                    + SWIRRECT * 4
        Select Case Jp
            Case 0:
                    intSxp = SWIRCXPS _
                               - intRad * Cos(sngAng * m_dblRad) + SWIRRECT
                    intSyp = SWIRCYPS
            Case 1:
                    intSxp = SWIRCXPS:
                    intSyp = SWIRCYPS _
                              + intRad * Cos(sngAng * m_dblRad) + SWIRRECT
            Case 2:
                    intSxp = SWIRCXPS _
                              - intRad * Cos(sngAng * m_dblRad) - SWIRRECT
                   intSyp = SWIRCYPS
            Case 3:
                   intSxp = SWIRCXPS
                   intSyp = SWIRCYPS _
                              - intRad * Cos(sngAng * m_dblRad) - SWIRRECT
        End Select
        '
        intRad = CInt(Sqr((intSxp - intCxp) ^ 2 + _
                          (intSyp - intCyp) ^ 2))
        '
        sngAng = Atn(Abs(intSxp - intCxp) / _
                 Abs(intSyp - intCyp)) / (4 * Atn(1)) * 180
        If Jp = 0 Or Jp = 2 Then
           sngAng = 90 - sngAng
        End If
        With ActiveDocument.Shapes.AddShape(msoShapeArc, _
             intCxp - intRad, intCyp - intRad, _
             intRad * 2, intRad * 2)
            .Fill.Visible = False
            .Line.ForeColor.RGB = vbBlue '←線色
            .Line.Weight = 1.5 '←線の太さ
            .Adjustments(1) = ((Jp * 90) Mod 360) - sngAng
            .Adjustments(2) = (((Jp * 90) + 90) Mod 360) - sngAng
         End With
    Next Ip
End Sub


HC220505B.png

 Const SWIRCONT = 1                               '巻き数

HC220505C.png

 Const SWIRCONT = 2                       '巻き数

蛇足
自分のHPにも 渦巻描画マクロを載せているけど、それは、関数を使って線描画していますが、このマクロは、中心をずらした円弧を合わせて描いています。

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