Option Explicit
Option Base 0
'
Public Sub 三葉線模様描画マクロ()
Const THLFCNXP = 100 '描画開始中心位置X
Const THLFCNYP = 120 ' Y
'
Const THLFANSP = 5 '描画刻み角度
Const THLFRATE = 15 '線の長さ倍率
'
Const THLFCOLS = 4 '横描画数
Const THLFVPIT = THLFRATE * 4.5 '横間隔
Const THLFLNWE = 1 '線の太さ
'---------------------------------------------------------------------------
Dim Ip As Integer, Jp As Integer
Dim Kp As Integer, Lp As Integer
Dim intCxp As Integer, intCyp As Integer
Dim sngPBas(360 / THLFANSP, 1) As Single
Dim sngPDat(360 / THLFANSP, 1) As Single
'
Dim sngSit As Single, sngRad As Single
Dim sngRds As Single
'
'*三葉線カーブベースポリラインデータ作成
sngRad = Atn(1) / 45
For Kp = 0 To UBound(sngPDat, 1)
sngSit = sngRad * (Kp * THLFANSP)
sngRds = 2 * Sin(3 * sngSit)
sngPBas(Kp, 0) = (sngRds * Cos(sngSit)) * THLFRATE
sngPBas(Kp, 1) = (sngRds * Sin(sngSit)) * THLFRATE
Next Kp
'
intCyp = THLFCNYP
For Ip = 0 To THLFCOLS - 1
intCxp = THLFCNXP + THLFVPIT * Ip
'↓描画数
Lp = Choose((Ip Mod 4) + 1, 3, 4, 6, 8)
For Jp = 0 To Lp - 1
'↓回転角
sngSit = sngRad * (Jp * (120 \ Lp))
'*ポリラインデータ位置設定
For Kp = 0 To UBound(sngPDat, 1)
sngPDat(Kp, 0) = sngPBas(Kp, 0) * Cos(sngSit) _
- sngPBas(Kp, 1) * Sin(sngSit) + intCxp
sngPDat(Kp, 1) = sngPBas(Kp, 1) * Cos(sngSit) _
+ sngPBas(Kp, 0) * Sin(sngSit) + intCyp
Next Kp
'*ポリライン描画
With ActiveDocument.Shapes.AddPolyline(sngPDat)
.Fill.Visible = msoFalse
.Line.Visible = msoTrue
.Line.ForeColor = vbMagenta '←線色
.Line.Weight = THLFLNWE '←線の太さ
End With
Next Jp
Next Ip
End Sub
蛇足
手動で一部をドラッグすると、このようになります。