2024/11/07

Notes - Excel 連携:#47)グラフタイトルの作成と配置

前回はグラフオブジェクト内の座標系についてまとめました。仕様が明確になったので、いよいよタイトルを表示するコーディングを始めます。

#45)グラフタイトルとテキストボックスの違い』で記載したように、標準のグラフタイトルは使用せず、”テキスト ボックス” でタイトルとサブタイトルを作成します。


テキストボックスの配置

今回、テキストボックスの幅はグラフエリアいっぱいにしておきます。文字を右寄せにするのでできるだけ大きくしておけば、文字の折り返しなど、細かなことは気にしなくて済むという判断です。基準のフォントを 10 ポイントとし、目立たせたいタイトルだけ 1.5 倍のフォントサイズで太字とします。

テキストボックスの高さはフォントサイズの 1.5 倍とし、文字の垂直揃えを真ん中に設定します。

これらの設定を行う関数は次の通りとなります。関数の引数は、グラフ全体を表す Shape オブジェクトとタイトル / サブタイトルに設定する文字列です。

Function xSetTitle(voShape As Variant, ByVal vsTitle As String, ByVal vsSubTitle As String)
   Dim oText As Variant

   'タイトル
   Set oText = xCreateTextBox(voShape)
   'オブジェクトの配置
   oText.Width = voShape.Width
   oText.Height = xcdFontSize * 1.5 * 1.5 ' フォントサイズ×マージンの 1.5
   Call oText.IncrementTop(-4) '上マージンをなくす
   With oText.TextFrame2
      'フォーマットの設定
      .TextRange.Font.Size = xcdFontSize * 1.5 'フォントサイズ(標準の1.5)
      .TextRange.ParagraphFormat.Alignment = msoAlignRight '水平方向に右揃え
      'テキスト
      .TextRange.Text = vsTitle
   End With

   'サブタイトル
   Set oText = xCreateTextBox(voShape)
   'オブジェクトの配置
   oText.Width = voShape.Width
   oText.Top = xcdFontSize * 1.5 * 1.5  'タイトルの高さ分下に下げる
   oText.Height = xcdFontSize * 1.5
   With oText.TextFrame2
      'フォーマットの設定
      .TextRange.Font.Size = xcdFontSize 'フォントサイズ
      .TextRange.ParagraphFormat.Alignment = msoAlignRight '水平方向に右揃え
      'テキスト
      .TextRange.Text = vsSubTitle
   End With
End Function

テキストボックスを作成する処理はサブ関数  xCreateTextBox は #45 で紹介しています。

なお、上記プログラムで未定義の定数を 2 つ使用しています。1 つ目は文字のフォントサイズである  です。このエージェントの (Declarations) に記載します。

Private Const xcdFontSize = 10  'ベースフォントサイズ

もう一つは文字列の水平揃えに関する定数です。今回は右寄せだけを使用していますが、ついでに左寄せも記述しておきます。なお、こちらの記述は lsXls ライブラリへの追加となるので注意してください。

'MsoParagraphAlignment 列挙 (Office)
Public Const msoAlignLeft = 1  '左寄せ
Public Const msoAlignCenter = 2  '中央揃え
Public Const msoAlignRight = 3  '右寄せ


メインプログラムの修正

関数ができあがったら、メインルーチンからコールします。

Sub Initialize
         ・・・
   'プロット領域の設定
   oChart.PlotArea.InsideWidth = 350
   oChart.PlotArea.InsideLeft = 50
   oChart.PlotArea.InsideTop = 7
   oChart.PlotArea.InsideHeight = 170

   'タイトルエリアの生成
   Call xSetTitle(oShape, "ユーザ数の推移", "Server01/Domino")

   oXls.Visible = True
End Sub


実行結果とまとめ

実行すると次のようにタイトル、サブタイトルが表示されます。また、グラフエリアの上から順に隙間なく配置されています。


ところで、テキストボックスの横幅にはグラフエリアの幅をセットしています。

   oText.Width = voShape.Width

以前まとめたように Excel は範囲外の値をセットしてもエラーを出さずうまく調整してくれます。今回はこの機能を利用して、以下の記述を省略しています。

    Call oText.IncrementLeft(-4)


前回 Notes - Excel 連携 次回


0 件のコメント:

コメントを投稿