Excelグラフの基本的な作り方――わかりやすい効果的なプレゼン/会議資料作成のために:Excelマクロ/VBAで始める業務自動化プログラミング入門(8)(2/4 ページ)
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、グラフ作成、折れ線/円など種類の指定、グラフタイトルやデータラベル、マーカー表示の方法などについて【Windows 10、Excel 2016に対応】。
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の「B2」セルの値を取得して、変数graphTitleに格納しておく(2〜3行目)。HasTitleにTrueを指定してタイトルを表示可能にし(7行目)、ChartTitle.TextにgraphTitle変数の値を指定する(8行目)。
「ChartObjects(1)」に指定している数値は、グラフのインデックス番号だ(6行目)。次に解説する、「グラフの名前を設定」で指定した「グラフ名」を指定することもできる。
今回は、グラフは1個しかないのでインデックスは1になる。もし2つのグラフが存在して、2個目のグラフにタイトルを指定したい場合は「ChartObjects(2)」と指定することになる。
図5の「グラフの作成」ボタンに、「リスト3」のマクロを関連付けて実行すると、図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
ActiveSheet.ChartObjectsのCountプロパティでワークシート上にグラフがあるかどうかを判別している(7行目)。グラフが存在した場合は、Nameプロパティで「平均点棒グラフ」という名前を付けている(8行目)。
1度グラフに名前を付けると、その後、ChartObjectsに指定する引数には、インデックス番号でも、先ほど付けたグラフ名でも、どちらでも指定ができる。今回はインデックスを使った記述をコメントアウトしグラフ名を使ってみた。
SetElementメソッドでグラフにデータラベルを表示する
次に、表示されたグラフ上に、点数を表示させてみよう。グラフに値を表示することを、次のように「データラベルを表示する」という。
グラフにデータラベルを表示するには、SetElementメソッドを使用する。書式は下記の通りだ。
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.
関連記事
- Excelマクロ/VBAリファレンス用途別・キーワード別一覧超まとめ
 ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
 Excelを通じて「ピボットテーブル」の基礎を学び、データ分析を実践するまでを習得する本連載。初回はピボットテーブルの基礎と、「どんなことができるのか」を解説する。
 どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
 Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。


