【エクセルVBA】3層の機能系統図を一発作成する方法!セルに内容記述するだけ

こんにちは、ヒガシです。

 

このページでは以下の画像に示すように、エクセルシート上のセルに記述された内容を反映し、

こんな感じの機能系統図を一発作成する方法をご紹介していきます。

エクセル上で機能系統図を自動作成した結果

なお、セルに内容を記述する都合上、3層までしか階層を増やせません。

※もし4層とかにしたい場合は、2層目以降をいくつか作って手動で1層目と2層目をつなげる等すれば効率的だと思います。

 

それではさっそくやっていきましょう!

 

スポンサーリンク

VBAの実行環境を構築しておく

先ほど紹介した作業はVBAを使って実行していきます。

VBAを使ったことがないという方はまずは以下の記事を参考に実行環境を整えておきましょう。

エクセルマクロ(VBA)の始め方!初心者向けに画像を使って詳細解説

 

スポンサーリンク

機能系統図の記述内容をエクセルに記入する

VBAの実行環境が整ったら、次は実際の機能系統図の作成作業に入りましょう。

今回は冒頭にも紹介した通り以下のように記述する形とします。

機能系統図内の中身をエクセル上に記述した結果

A1セルを1層目の主機能とし、B列がそれに影響する因子、C列以降がB列のそれぞれの因子に影響する因子、という形で記述していきます。

まぁ、ここは一回動かしてみればどんな形になるかわかります。

 

なお、以降で紹介するVBAコードはこの場所にデータが入力されていることを前提に書いています。

記述場所を変更してしまうとうまく動きませんのでご了承ください。

 

スポンサーリンク

機能系統図の作成VBAコード

それでは本題である機能系統図の作成コードの紹介に入ります。

Sub change_style(Input_Context)
    With Selection.ShapeRange
        .TextFrame2.TextRange.Characters.Text = Input_Context
        .TextFrame2.WordWrap = msoFalse
        .TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
        .Line.Visible = msoTrue
        .Line.ForeColor.RGB = RGB(0, 0, 0)
    End With
End Sub

Sub Functional_System_Diagram()
    num_row2 = 3
    num_col3 = 3
    space_num = 40
    'ボックスを作成する処理
    '1層目の処理
    startx = 100
    starty = space_num * num_col3
    box_width = 100
    box_height = 100
    Input_Context = Cells(1, 1).Value
    ActiveSheet.Shapes.AddLabel(msoTextOrientationHorizontal, startx, starty, box_width, box_height).Select
    Call change_style(Input_Context)
    Selection.ShapeRange.Name = "shape1"
    '2層目の処理
    For i = 1 To num_row2
        startx = 200
        starty = i * space_num * num_col3
        Input_Context = Cells(i, 2).Value
        ActiveSheet.Shapes.AddLabel(msoTextOrientationHorizontal, startx, starty, box_width, box_height).Select
        Call change_style(Input_Context)
        Selection.ShapeRange.Name = "shape2_" & i
    Next
    '3層目の処理
    For i = 1 To num_row2
        For j = 1 To num_col3
            startx = 300
            starty = i * space_num * num_col3 + (j - 1) * 10 * num_col3
            Input_Context = Cells(i, 2 + j).Value
            ActiveSheet.Shapes.AddLabel(msoTextOrientationHorizontal, startx, starty, box_width, box_height).Select
            Call change_style(Input_Context)
            Selection.ShapeRange.Name = "shape3_" & i & "_" & j
        Next
    Next
    'ボックス間の線をつなぐ処理
    '1⇒2層目の処理
    For i = 1 To num_row2
        '直線を追加する
        ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 0, 1, 0, 1).Select
        '直線の色を変更する
        Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
        '線の始点、終点を指定する
        start_shape = "shape1"
        end_shape = "shape2_" & i
        Selection.ShapeRange.ConnectorFormat.BeginConnect ActiveSheet.Shapes(start_shape), 4
        Selection.ShapeRange.ConnectorFormat.EndConnect ActiveSheet.Shapes(end_shape), 2
    Next
    '2⇒3層目の処理
    For i = 1 To num_row2
        For j = 1 To num_col3
            '直線を追加する
            ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 0, 0, 0, 0).Select
            '直線の色を変更する
            Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
            '線の始点、終点を指定する
            start_shape = "shape2_" & i
            end_shape = "shape3_" & i & "_" & j
            Selection.ShapeRange.ConnectorFormat.BeginConnect ActiveSheet.Shapes(start_shape), 4
            Selection.ShapeRange.ConnectorFormat.EndConnect ActiveSheet.Shapes(end_shape), 2
        Next
    Next
End Sub

結構長いですね。

似たような処理を繰り返すだけなんですが、層によって微妙にやることが変わるんで厄介でしたね・・・。

 

いずれにせよ、これを記述したあとに

Functional_System_Diagramの方のマクロを実行すれば機能系統図の作成が完了しているはずです。

 

スポンサーリンク

機能系統図内の因子数を変更する方法

先ほど紹介した例では2層目の因子数が3つ、3層目の因子数もすべて3つという状態で作成しましたが、プログラム内の num_row2 ,  num_col3  という変数を変更すれば機能系統図内の因子数を自由に変更可能です。

 

以下がnum_row2 , num_col3 が表している数値の意味です。

プログラム内部の変数の意味を解説

因子数を追加する際などは、プログラム内部の数値も一緒に書き換えるよう、注意してください。

 

スポンサーリンク

おわりに

というわけで今回はエクセルシート上に記述した内容から、機能系統図を一発作成する方法をご紹介しました。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

ぜひ他の記事ものぞいてみてください。

コメント

タイトルとURLをコピーしました