グラフにタイトルを表示するには、HasTitleとChartTitleプロパティを使用する。書式は下記の通りだ。
ChartObjects.Chart.HasTitle={TrueまたはFalse}
ChartObjects.Chart.ChartTitle.Text={タイトル}
{タイトル}を表示する場合はHasTitleにTrueを指定する。
「ChartObjects」とは、指定されたグラフシート、ダイアログシート、またはワークシート上の全てのChartObjectオブジェクトのコレクションを表す。各ChartObjectオブジェクトは埋め込みグラフを表す。
ChartObjectオブジェクトは、Chartオブジェクトのコンテナとして機能する。ChartObjectオブジェクトのプロパティとメソッドは、シートにある埋め込みグラフのサイズと外観を制御する。
この書式を使ってグラフに「学科別の平均点」というタイトル表示させてみよう。リスト2にリスト3のようなコードを追加する。
Sub グラフを作成してタイトルを追加() Dim graphTitle As String graphTitle = Range("B2").Value Range("C3:F11").Select ActiveSheet.Shapes.AddChart With ActiveSheet.ChartObjects(1).Chart .HasTitle = True .ChartTitle.Text = graphTitle End With End Sub
図3の「B2」セルの値を取得して、変数graphTitleに格納しておく(2〜3行目)。HasTitleにTrueを指定してタイトルを表示可能にし(7行目)、ChartTitle.TextにgraphTitle変数の値を指定する(8行目)。
「ChartObjects(1)」に指定している数値は、グラフのインデックス番号だ(6行目)。次に解説する、「グラフの名前を設定」で指定した「グラフ名」を指定することもできる。
今回は、グラフは1個しかないのでインデックスは1になる。もし2つのグラフが存在して、2個目のグラフにタイトルを指定したい場合は「ChartObjects(2)」と指定することになる。
図5の「グラフの作成」ボタンに、「リスト3」のマクロを関連付けて実行すると、図5のように表示される。
次に、先にも言ったようにグラフに名前を付けてみよう。グラフに名前を指定するにはNameプロパティを使用する。書式は下記の通りだ。
ChartObjects.Name={グラフ名}
図5のグラフに「平均点棒グラフ」という名前を付ける場合、マクロはリスト4のように書く。リスト3のマクロを書き換えてみよう。
Option Explicit Sub グラフを作成してタイトルを追加() Dim graphTitle As String graphTitle = Range("B2").Value Range("C3:F11").Select ActiveSheet.Shapes.AddChart If ActiveSheet.ChartObjects.Count > 0 Then ActiveSheet.ChartObjects(1).Name = "平均点棒グラフ" End If With ActiveSheet.ChartObjects("平均点棒グラフ").Chart .HasTitle = True .ChartTitle.Text = graphTitle End With End Sub
ActiveSheet.ChartObjectsのCountプロパティでワークシート上にグラフがあるかどうかを判別している(7行目)。グラフが存在した場合は、Nameプロパティで「平均点棒グラフ」という名前を付けている(8行目)。
1度グラフに名前を付けると、その後、ChartObjectsに指定する引数には、インデックス番号でも、先ほど付けたグラフ名でも、どちらでも指定ができる。今回はインデックスを使った記述をコメントアウトしグラフ名を使ってみた。
次に、表示されたグラフ上に、点数を表示させてみよう。グラフに値を表示することを、次のように「データラベルを表示する」という。
グラフにデータラベルを表示するには、SetElementメソッドを使用する。書式は下記の通りだ。
ChartObjects.Chart.SetElement {メンバー名}
{メンバー名}には表1の値がある。あまりにたくさんの値があるので、データラベルに関するものだけ表にしている。全ての{メンバー名}を知りたい方は「MsoChartElementType enumeration (Microsoft.Office.Core) - MSDN」(英語)を参照してほしい。
{メンバー名} | 説明 |
---|---|
msoElementDataLabelBestFit | データラベルの自動調整 |
msoElementDataLabelBottom | データラベルを下に表示 |
msoElementDataLabelBottom | データラベルを中央に表示 |
msoElementDataLabelCenter | データラベルを中央に表示 |
msoElementDataLabelInsideBase | データラベルを内側の底部に表示 |
msoElementDataLabelInsideEnd | データラベルを内側の末尾に表示 |
msoElementDataLabelLeft | データラベルを左側に表示 |
msoElementDataLabelNone | データラベルを表示しない |
msoElementDataLabelOutSideEnd | データラベルを外側の末尾に表示 |
msoElementDataLabelRight | データラベルを右側に表示 |
msoElementDataLabelShow | データラベルを表示 |
msoElementDataLabelTop | データラベルを上に表示 |
参考「MsoChartElementType enumeration (Microsoft.Office.Core) - MSDN」 |
表1のmsoElementDataLabelOutSideEndを使って、データラベルを外側の末尾に追加してみよう。マクロはリスト5になる。
Sub グラフを作成してタイトルを追加() : : ※リスト4と同じにつき省略 : : With ActiveSheet.ChartObjects("平均点棒グラフ").Chart .HasTitle = True .ChartTitle.Text = graphTitle .SetElement msoElementDataLabelOutSideEnd .SeriesCollection("2年").Select .SetElement msoElementDataLabelInsideBase End With ActiveCell.Activate End Sub
「.SetElement msoElementDataLabelOutSideEnd」の記述だけでは、グラフの上部にデータラベルが表示され、値が重なって表示されてしまう(10行目)。そこで「2年」のデータのみmsoElementDataLabelInsideBaseを指定して、「データラベルを内側の底部に表示」するようにした(12行目)。こうすると値が重ならず、見やすくなる。
「2年」のグラフを選択するには、11行目のように記述する。「SeriesCollection({要素})」はグラフの系列を操作するメソッドだ。要素には参照したい系列を指定する。この場合は「2年」を指定している。
最後に、「ActiveCell.Activate」と記述してアクティブセルをアクティブにしている(14行目)。この1文を記述していないと、「2年」のグラフ自体が選択された状態で表示される。
リスト5を実行すると、図6のようになる。
次ページでは、グラフの種類を設定してみよう。Excelのグラフには、棒グラフ以外にもたくさんのグラフが用意されている。
Copyright © ITmedia, Inc. All Rights Reserved.