【Excel VBA】順次流れ図描画マクロ▽ソースコード

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

A列の文字列を流れ図に挿入
HC230617B.png


HC230617C.png

HC230617D.png

手動で位置移動   
   処理ボックスのサイズは、行幅、列幅で変えれます。
                 (その際は、再実行要)
HC230617E.png

Option Explicit
Option Base 0
'
Public Sub 順次流れ図描画マクロ()
    Const FCDLFTCL = 4            '流れ図左端桁番号
    Const FCDTOPRW = 2          '流れ図上端行番号
    Const FCDWIDCL = 2           '流れ図幅桁数 
    Const FCPHEIRW = 2           '流れ図高さ行数(処理)
    Const FCTHEIRW = 1           '流れ図高さ行数(端子)
    '
    Const FCDSPCRW = 2          '流れ図間隔行数
    '
    '挿入テキスト文字格納セル
    Const FCCMTCOL = 1 '桁番号
    Const FCCMTROW = 2 '先頭行番号
    '
    '挿入テキストフォント
    Const FCCFNTNA = "MS ゴシック"
    Const FCCFNTSZ = 16
    '
    '線の太さ
    Const FCDWLNWT = 1
    '
    Const FCDWLNCL = vbBlack            '線色
    Const FCDWFLCL = vbWhite           '塗りつぶし色
    '---------------------------------------------------------------------------
    Dim Ip As Integer
    Dim sngLft As Single, sngWid As Single
    Dim sngTop As Single, sngHei As Single
    Dim intCRw As Integer, intDRw As Integer
    Dim blnEnd As Boolean, blnEdg As Boolean
    Dim strTex As String
    Dim strNam As String, varNam As Variant
    '
    With ActiveSheet
         '左端位置取得
         sngLft = .Cells(FCDTOPRW, FCDLFTCL).Left
         '描画幅取得
         sngWid = 0:
         For Ip = 0 To FCDWIDCL - 1
             sngWid = sngWid + _
             .Cells(FCDTOPRW, FCDLFTCL + Ip).Width
         Next Ip
         '
         '*端子と処理ボックスを描画
         intDRw = FCDTOPRW: intCRw = FCCMTROW
         blnEnd = False: strNam = ""
         Do While blnEnd = False
            '上端位置取得
            sngTop = .Cells(intDRw, FCDLFTCL).Top
            '
            '端かどうか取得
            blnEdg = IIf(intDRw = FCDTOPRW, True, False)
            If Trim(.Cells(intCRw + 1, FCCMTCOL).Value) _
                   = "" Then blnEdg = True: blnEnd = True
            '描画高さ取得
            sngHei = 0
            For Ip = 0 To _
                IIf(blnEdg, FCTHEIRW, FCPHEIRW) - 1
                sngHei = sngHei + _
                  .Cells(intDRw + Ip, FCDLFTCL).Height
            Next Ip
            '挿入文字取得
            strTex = .Cells(intCRw, FCCMTCOL).Value
            '流れ図、部品描画
            With .Shapes.AddShape( _
             IIf(blnEdg, msoShapeFlowchartTerminator, _
                           msoShapeFlowchartProcess), _
                 sngLft, sngTop, sngWid, sngHei)
                 '塗りつぶし色
                 .Fill.Visible = msoTrue
                 .Fill.ForeColor.RGB = FCDWFLCL
                 '線色
                 .Line.Visible = msoTrue
                 .Line.ForeColor.RGB = FCDWLNCL
                 .Line.Weight = FCDWLNWT
                 '
                 With .TextFrame
                   'テキスト ,フォント
                   With .Characters
                      .Text = strTex
                      .Font.ColorIndex = 0
                      .Font.Name = FCCFNTNA
                      .Font.Size = FCCFNTSZ
                      .Font.Bold = True
                   End With
                   'テキスト位置
                   .HorizontalAlignment = xlHAlignCenter
                   .VerticalAlignment = xlVAlignCenter
                End With
                '描画図形の名前取得-コネクタ接続用
                If strNam <> "" Then strNam = strNam & ","
                strNam = strNam & .Name
            End With
           '
           intCRw = intCRw + 1
           intDRw = intDRw + IIf(blnEdg, FCTHEIRW, FCPHEIRW) + 2
         Loop
         '
         'コネクタ描画
         varNam = Split(strNam, ",")
         For Ip = LBound(varNam, 1) To UBound(varNam, 1) - 1
             With .Shapes.AddConnector _
                  (msoConnectorStraight, 1, 1, 1, 1)
                 .Line.ForeColor.RGB = FCDWLNCL
                 .Line.Weight = FCDWLNWT
                 '
                 .ConnectorFormat.BeginConnect _
                  ActiveSheet.Shapes(CStr(varNam(Ip + 0))), 1
                 .ConnectorFormat.EndConnect _
                  ActiveSheet.Shapes(CStr(varNam(Ip + 1))), 1
                  'コネクタ、再接続
                 .RerouteConnections
            End With
         Next Ip
    End With
End Sub

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