とりあえずフローチャートの箱を作る
職場で、Excel に関するこんな相談を受けました。
フローチャートを作成する際、箱を配置して処理を書き込む手間を省きたい。
よくよく聞いてみると、別の場所(電気回路図の一部)には既に処理の流れを記載したものがあって、それをフローチャート化したいとのこと。一括でコピー&ペーストできるとのことで、確かに箱の一つずつに転記するのは面倒です。
そこで一つのセルを一つの箱(「処理」)に見立て、とにかくセルの並び順に箱を並べ、まずセルの記載内容を箱に転記することにしました。
[標準モジュール]
Public SFC() As ShapeFormatClass Public Sub MakeBlock() Dim seq As Variant seq = Selection ReDim SFC(1 To UBound(seq, 1), 1 To UBound(seq, 2)) Dim i As Long, j As Long For j = 1 To UBound(seq, 2) For i = 1 To UBound(seq, 1) If seq(i, j) <> "" Then Set SFC(i, j) = New ShapeFormatClass Set SFC(i, j).myShape = ActiveSheet.Shapes.AddShape(msoShapeFlowchartProcess, 50 + j * 200, 50 + i * 100, 100, 50) SFC(i, j).myShape.TextFrame2.TextRange.Characters.Text = seq(i, j) SFC(i, j).myShape.Name = SFC(i, j).myShape.Name & "_" & i & "_" & j SFC(i, j).SetFormat End If Next Next End Sub
使うかどうか分かりませんが、各箱の名前にセルの配置順も含めてみました。
↓ こちらでは、箱の色や文字の配置を調整しています。
[クラスモジュール]名前:ShapeFormatClass
Public myShape As Shape Public Sub SetFormat() myShape.Select With Selection.ShapeRange .Fill.Visible = msoFalse With .Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorText1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 .Transparency = 0 .Weight = 1 End With .TextFrame2.VerticalAnchor = msoAnchorMiddle .TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter .TextFrame2.TextRange.Font.Fill.ForeColor.ObjectThemeColor = msoThemeColorText1 End With End Sub
結果は、こんな感じです。
さてここから更に、以下に挑戦する予定です。
- 指定した「処理」を「分岐」(※ひし形)などに変更
- 指定した「処理」同士をコネクタで接続
- 指定したコネクタの中間に、処理を挿入
- などなど
上手くいったら、後日こちらで紹介することにします。
ちなみに、thomさんがブログで、フローチャート作成ツールを公開されています。上記挑戦の際は、恐らくこちらの記載内容にも大いにお世話になると思います。
thom.hateblo.jp
参考まで。