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

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

Option Explicit
Option Base 0
Public Sub 竹縞模様描画マクロ() 
    Const BAMBLEFT = 90           '描画開始位置X
    Const BAMBTOPP = 80      '      Y
    Const BAMBHEIG = 180            '描画高さ
    '
    Const BAMBTWID = 15             '節の幅
    Const BAMBSCHT = 3               '節の高さ
    Const BAMBVSPC = 30             '横-間隔
    Const BAMBCOLS = 7              '横/描画数
    Const BAMBSECS = 4              '節の数
    Const BAMBSHEI = (BAMBHEIG \ BAMBSECS)
    '
    Const BAMBSECP = 0.3           '節の凸傾斜
    Const BAMBLNWE = 1             '線の太さ
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim intDxp As Integer, intDyp As Integer
    Dim intDhe(BAMBSECS) As Integer
    Dim intDwd As Integer, lngCol(1) As Long
    '
    lngCol(0) = vbBlack                '←輪郭線色
    lngCol(1) = RGB(34, 139, 34)    '←竹の色
    intDwd = BAMBTWID - (BAMBSCHT * BAMBSECP) * 2
    Randomize                           '*乱数系列初期化
    For Ip = 0 To BAMBCOLS - 1
        intDxp = BAMBLEFT + BAMBVSPC * Ip + BAMBVSPC \ 2
        '*節の位置設定
        intDhe(BAMBSECS) = 0
        For Jp = 0 To BAMBSECS - 1
            If Jp < BAMBSECS - 1 Then
               '乱数で筒長に長短をつける
               intDhe(Jp) = BAMBSHEI + _
               (BAMBSHEI / 2) * (Rnd - 0.5)
            Else
               intDhe(Jp) = BAMBHEIG - intDhe(BAMBSECS)
            End If
           intDhe(BAMBSECS) = intDhe(BAMBSECS) + intDhe(Jp)
        Next Jp
        intDyp = BAMBTOPP
        For Jp = 0 To BAMBSECS - 1
            '*竹の筒(長方形)描画
            With ActiveDocument.Shapes.AddShape( _
                 msoShapeRectangle, _
                 intDxp - intDwd / 2, intDyp, _
                 intDwd, intDhe(Jp) _
                 - IIf(Jp < BAMBSECS - 1, BAMBSCHT, 0))
                .Fill.Visible = msoTrue
                .Fill.ForeColor.RGB = lngCol(1)
                .Line.Visible = msoTrue
                .Line.ForeColor.RGB = lngCol(0)
                .Line.Weight = BAMBLNWE
            End With
            If Jp < BAMBSECS - 1 Then
               '*竹の節(六角形)描画
               With ActiveDocument.Shapes.AddShape( _
                    msoShapeHexagon, _
                   intDxp - BAMBTWID / 2, _
                   intDyp + intDhe(Jp) - BAMBSCHT, _
                   BAMBTWID, BAMBSCHT)
                   .Fill.Visible = msoTrue
                   .Fill.ForeColor.RGB = lngCol(1)
                   .Line.Visible = msoTrue
                   .Line.ForeColor.RGB = lngCol(0)
                   .Line.Weight = BAMBLNWE
                   .Adjustments(1) = BAMBSECP
               End With
               '*竹の節の線を描画
               With ActiveDocument.Shapes.AddLine( _
                    intDxp - intDwd / 2, _
                    intDyp + intDhe(Jp) - BAMBSCHT / 2, _
                    intDxp + intDwd / 2, _
                    intDyp + intDhe(Jp) - BAMBSCHT / 2).Line
                   .ForeColor.RGB = lngCol(0)
                   .Weight = BAMBLNWE
              End With
            End If
            '描画位置を更新
            intDyp = intDyp + intDhe(Jp)
        Next Jp
    Next Ip
End Sub

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