Excelグラフの基本的な作り方――わかりやすい効果的なプレゼン/会議資料作成のためにExcelマクロ/VBAで始める業務自動化プログラミング入門(8)(2/4 ページ)

» 2016年08月26日 05時00分 公開
[薬師寺国安PROJECT KySS]

HasTitleとChartTitleプロパティでグラフにタイトルを表示

 グラフにタイトルを表示するには、HasTitleとChartTitleプロパティを使用する。書式は下記の通りだ。

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 グラフを作成してタイトルを追加

 図3の「B2」セルの値を取得して、変数graphTitleに格納しておく(2〜3行目)。HasTitleにTrueを指定してタイトルを表示可能にし(7行目)、ChartTitle.TextにgraphTitle変数の値を指定する(8行目)。

 「ChartObjects(1)」に指定している数値は、グラフのインデックス番号だ(6行目)。次に解説する、「グラフの名前を設定」で指定した「グラフ名」を指定することもできる。

 今回は、グラフは1個しかないのでインデックスは1になる。もし2つのグラフが存在して、2個目のグラフにタイトルを指定したい場合は「ChartObjects(2)」と指定することになる。

 図5の「グラフの作成」ボタンに、「リスト3」のマクロを関連付けて実行すると、図5のように表示される。

図5 グラフにタイトルが表示された

Nameプロパティでグラフに名前を設定

 次に、先にも言ったようにグラフに名前を付けてみよう。グラフに名前を指定するにはNameプロパティを使用する。書式は下記の通りだ。

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
リスト4 グラフ名を設定

 ActiveSheet.ChartObjectsのCountプロパティでワークシート上にグラフがあるかどうかを判別している(7行目)。グラフが存在した場合は、Nameプロパティで「平均点棒グラフ」という名前を付けている(8行目)。

 1度グラフに名前を付けると、その後、ChartObjectsに指定する引数には、インデックス番号でも、先ほど付けたグラフ名でも、どちらでも指定ができる。今回はインデックスを使った記述をコメントアウトしグラフ名を使ってみた。

SetElementメソッドでグラフにデータラベルを表示する

 次に、表示されたグラフ上に、点数を表示させてみよう。グラフに値を表示することを、次のように「データラベルを表示する」という。

 グラフにデータラベルを表示するには、SetElementメソッドを使用する。書式は下記の通りだ。

SetElementメソッドの書式

ChartObjects.Chart.SetElement {メンバー名}


 {メンバー名}には表1の値がある。あまりにたくさんの値があるので、データラベルに関するものだけ表にしている。全ての{メンバー名}を知りたい方は「MsoChartElementType enumeration (Microsoft.Office.Core) - MSDN」(英語)を参照してほしい。

表1 SetElementメソッドに指定する{メンバー名}
{メンバー名} 説明
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
リスト5 グラフにデータラベルを追加する(リスト4にSetElementを追加したコードのみ)

 「.SetElement msoElementDataLabelOutSideEnd」の記述だけでは、グラフの上部にデータラベルが表示され、値が重なって表示されてしまう(10行目)。そこで「2年」のデータのみmsoElementDataLabelInsideBaseを指定して、「データラベルを内側の底部に表示」するようにした(12行目)。こうすると値が重ならず、見やすくなる。

 「2年」のグラフを選択するには、11行目のように記述する。「SeriesCollection({要素})」はグラフの系列を操作するメソッドだ。要素には参照したい系列を指定する。この場合は「2年」を指定している。

 最後に、「ActiveCell.Activate」と記述してアクティブセルをアクティブにしている(14行目)。この1文を記述していないと、「2年」のグラフ自体が選択された状態で表示される。

 リスト5を実行すると、図6のようになる。

図6 グラフにデータラベルが表示された。「2年」のデータラベルは底部に表示されている

 次ページでは、グラフの種類を設定してみよう。Excelのグラフには、棒グラフ以外にもたくさんのグラフが用意されている。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。