前回は図形のフローチャートの「フォントの設定」から「文字の配置」までを行いました。今回は「段落」の設定のマクロの記録から始めて、作ったマクロを実行するところまでを行いたいと思います。
マクロの記録
1.「開発タブ」 → 「マクロの記録」を選択します。
2. 図形の文字を範囲選択してマウスを右クリック → [段落]を選択 → 間隔の行間を[固定値]にして → 間隔を[8pt]にして[OK]を押します。

3. 図形の文字を範囲選択した状態のまま、マウスを右クリック → [図形の書式設定]を選択 → [テキストボックス]を選択 → 内部の余白の左右上下を全て[0]にします。

4.「開発タブ」 → 「記録終了」ボタンを押します。
いま作成したプログラムを開きます。「開発タブ」→「コードの表示」でVBEを開いて「標準モジュール」の「Module1」をダブルクリックします。
記録したコードは次のようになっていると思います。
Sub Macro2()
'
' Macro2 Macro
'
'
ActiveSheet.Shapes.Range(Array("Flowchart: Decision 1")).Select
Selection.ShapeRange.TextFrame2.TextRange.ParagraphFormat.SpaceWithin = 8
Selection.ShapeRange.TextFrame2.MarginLeft = 5.6692913386
Selection.ShapeRange.TextFrame2.MarginLeft = 2.8346456693
Selection.ShapeRange.TextFrame2.MarginLeft = 0
Selection.ShapeRange.TextFrame2.MarginRight = 5.6692913386
Selection.ShapeRange.TextFrame2.MarginRight = 2.8346456693
Selection.ShapeRange.TextFrame2.MarginRight = 0
Selection.ShapeRange.TextFrame2.MarginTop = 2.8346456693
Selection.ShapeRange.TextFrame2.MarginTop = 0
Selection.ShapeRange.TextFrame2.MarginBottom = 2.8346456693
Selection.ShapeRange.TextFrame2.MarginBottom = 0
End Sub
上のコードを必要なコードだけ残して修正したものが次のようになります。行間を8pt(ポイント)の固定値として正しく動作させる「LineRuleWithin」プロパティがマクロの記録では記録されないので、コードの上から3行目に「TextRange.ParagraphFormat.LineRuleWithin = msoFalse」のコードを追加しました。
Sub Macro2()
ActiveSheet.Shapes.Range(Array("Flowchart: Decision 1")).Select
With Selection.ShapeRange.TextFrame2
.TextRange.ParagraphFormat.LineRuleWithin = msoFalse '行間を8pt(ポイント)の固定値として正しく動作させるコードを追加。
.TextRange.ParagraphFormat.SpaceWithin = 8 '段落の行間を8ポイント(pt)の固定の高さに設定する。
.MarginLeft = 0
.MarginRight = 0
.MarginTop = 0
.MarginBottom = 0
End With
End Sub
そして前回の「Excelのフローチャートの図形の文字設定を自動化する(前編)」で作成したMacro1のコードと組み合わせたものが次のようになります。
Sub Macro2()
ActiveSheet.Shapes.Range(Array("Flowchart: Decision 1")).Select
With Selection.ShapeRange.TextFrame2
.TextRange.Font.NameComplexScript = "MS ゴシック" '特殊な記号などをMSゴシックに設定する。
.TextRange.Font.NameFarEast = "MS ゴシック" '漢字、ひらがな、カタカナなどをMSゴシックに設定する。
.TextRange.Font.Name = "MS ゴシック" 'アルファベットや数字などをMSゴシックに設定する。
.TextRange.Font.Size = 8 '文字サイズを 8ポイントに設定する。
.TextRange.Font.BaselineOffset = 0 '文字の垂直方向の位置を標準に設定します。
.TextRange.Font.Spacing = -1 '文字の間隔が1ポイント狭まります。
.VerticalAnchor = msoAnchorMiddle 'テキストの垂直方向(上下)の配置を中央揃えにします。
.TextRange.ParagraphFormat.Alignment = msoAlignCenter 'テキストの水平方向(左右)の配置を中央揃えにします。
.TextRange.ParagraphFormat.LineRuleWithin = msoFalse '行間を8ポイント(pt)の固定値として正しく動作させるコードを追加。
.TextRange.ParagraphFormat.SpaceWithin = 8 '段落の行間を8ポイント(pt)の固定の高さに設定する。
.MarginLeft = 0 '図形内の左側の余白を無くしてテキストを配置します。
.MarginRight = 0 '図形内の右側の余白を無くしてテキストを配置します。
.MarginTop = 0 '図形内の上側の余白を無くしてテキストを配置します。
.MarginBottom = 0 '図形内の下側の余白を無くしてテキストを配置します。
End With
End Sub
マクロを実行する前の準備
マクロを実行する前に「挿入タブ」→「図形」→「フローチャート:判断」でエクセルシート上に新しく「ひし形」の図形を作成しておきます。
図形を右クリックして「サイズとプロパティ」から「高さ1.87㎝」「幅3.58㎝」で図形のサイズを設定します。



作成した図形を選択してエクセルの左上(数式バーの左隣)にある名前ボックスに「フローチャート : 判断 2」と表示されている場合はMacro2のプログラムコード内の「Flowchart: Decision 1を」「Flowchart: Decision 2」に書き換えます。
ActiveSheet.Shapes.Range(Array(“Flowchart: Decision 1”)).Selectの「Decision 1」がそのシート内で、同じ種類の図形(ひし形)が作成された順番を表すので、2つ目に作成したひし形でしたら「Flowchart: Decision 2」ということになります。
続いて図形を右クリックして「テキストの編集」を選択して「If Range(“A1”).Value = 10 Then」と入力します。これでマクロを実行する準備ができました。

マクロの実行
図形を選択していない状態で「開発タブ」 →「マクロの表示」ボタン → 表示された一覧からマクロ名「Macro2」を選択 → 「実行」ボタンを押してプログラムを実行します。
マクロの実行後に図形内の文字がこのようになっていればOKです。

最後の設定の「英単語の途中で改行する」はマクロの記録では対応していないので手動で行って下さい。図形の文字を範囲選択してマウスを右クリック → [段落]を選択 → 体裁タブにして → 英単語の途中で改行するをチェックして[OK]を押して設定します。
英単語の配置が下のようになれば設定完了です。

今回はフローチャートの文字設定の自動化でしたが、フローチャートの図形の作成から自動化をすればもっと楽に作業ができるのではないかと思います。
