EdgeExcelグラフにタイトル、凡例、データラベルを表示する:VBA/マクロ便利Tips業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。2013グラフをカスタマイズして見やすくし、高い訴求力を今回は、グラフのタイトルや凡例、データラベルに関するTipsを紹介する。グラフにこれらを表示するだけで、より見やすい資料になるのではないだろうか。タイトルも凡例も、データを選択してグラフを作成すると、タイトルになりそうな文字列があれば自動的にそれがタイトルとして表示され、凡例も自動的に作成される。凡例として表示されるべき項目があった場合に凡例も自動的に表示される。そのため、タイトルや「凡例の位置」が表示されることもある。そこで、自分でタイトルや「凡例の位置」を設定する方法を見ていこう。グラフのデータラベルも、グラフを表示させる場合には結構利用されると思う。実際のデータの値をグラフ上に直接表示させるわけだから、グラフが見やすくなり訴求力も増してくるはずだ。データラベルはExcelからでもグラフに容易に表示できる。グラフ自体を選択して、マウスの右クリックで表示される「データラベルの表示」を選択すると、グラフ上にデータラベルが表示される。グラフをマクロで自動的に作成するのなら、やはりデータラベルも同じように表示させる方がより自動化されたものになるのではないだろうか。知っておいて損のないTipsだと思う。グラフにタイトルを指定するChartTitle.Textプロパティまず、グラフにタイトルを入れる方法について解説する。図1のようなタイトルの設定されたグラフと「タイトルを入力」セルと「実行」というボタンがあったとしよう。タイトルの設定されたグラフと「タイトルを入力」セルと「実行」ボタンを配置した図1のグラフに「タイトルを入力」セルに入力したタイトルを適用させてみよう。グラフにタイトルを入れる書式は下記のようになる。グラフにタイトルを入れる書式ActiveSheet.ChartObjects(1).Chart.HasTitle=TrueActiveSheet.ChartObjects(1).Chart.ChartTitle.Text=指定したタイトル「ChartObjects」はChartObjectオブジェクトのコレクションを表す。「1」はワークシート上のアクティブシートに配置されているグラフのインデックス番号に当たる。ChartTitleオブジェクトのTextプロパティに図1のセル「F2」に入力された値を適用する。この書式を用いてマクロを記述してみよう。Editor)のメニューから[挿入]→[標準モジュール]と選択する。プロジェクトにModule1が追加されるので、Module1をダブルクリックして表示されるエディター画面内にリスト1のコードを記述する。"タイトルを入力してください。指定したタイトルをグラフに適用するコードまず、3行目でChartObjectオブジェクトのコレクションであるChartObjects(1)のHasTitleプロパティでグラフにタイトルを表示させるよう指定する。4行目で「タイトル入力」のセルが未入力かどうか判定し、未入力の場合は警告メッセージを出して処理を抜ける。それ以外は8行目の処理を行う。8行目では、ChartObjects(1)のグラフのChartTitleのTextプロパティに「F2」のセルに入力された値を指定する。これで、ワークシート上のアクティブシートに表示されている1個のグラフのタイトルが指定される。このマクロを図1の「実行」ボタンに関連付け実行すると、図2のように表示される。セル「F2」に入力した値がタイトルとして表示される。タイトルが、指定したタイトルに変更されたグラフの凡例の位置を指定するLegend.Positionプロパティ次に、グラフの凡例の位置を指定するTipsを紹介する。図2の任意の場所に「凡例の位置実行」というボタンを配置しておこう。グラフの凡例の位置を指定する書式ActiveSheet.ChartObjects(1).Chart.HasLegend=TrueActiveSheet.ChartObjects(1).Chart.Legend.Position={表1の値}ChartObjectsや「1」については、先ほどと同様なので割愛する。ここでは、ChartObjectオブジェクトのコレクションであるChartObjectsのインデックスに対応するグラフのHasLegendプロパティにTrueを指定して、グラフに凡例を表示させるよう指定する。次に、LegendオブジェクトのPositionプロパティに、{表1の値}を指定する。MSDN先ほど追加したModule1内に「凡例の位置」を表示するリスト2のコードを記述する。凡例の位置を表示するコードHasLegendプロパティにTrueを指定して、凡例を表示するように指定する。LegendオブジェクトのPositionプロパティに、ここではグラフの左に凡例を表示するよう、「xlLegendPositionLeft」と指定した。リスト2のマクロを、図2の「凡例の位置実行」ボタンに関連付け実行すると、図3のように凡例が指定した位置に表示される。凡例が指定した位置(この場合左側)に表示された図2と比べると、図3のグラフに凡例が挿入されているのが分かるだろう。今回のデータでは、特に凡例として表示されるべき項目がなかったため、「■5月売上金額」とだけ表示された。凡例として表示されるべき項目があった場合には、本来は自動的に凡例が表示される。作成したデータによっては凡例が不要で表示が必要ない場合もある。今回は無理に凡例を追加したため、図3のような凡例になった。凡例の表示方法が理解できればいいので、これで良しとしよう。凡例の背景を塗りつぶす色を指定するLegend.Format.Fill.ForeColor.RGBプロパティ続いて、凡例の背景を塗りつぶす色を指定するTipsについて解説する。図4のような生徒別の各科目の点数のデータがあり、そのグラフが凡例と共に表示されているとしよう。図4にはいつもの手順で配置した「凡例の背景色を設定」というボタンが配置されている。生徒別の各科目の点数のデータがあり、そのグラフが凡例と共に表示されている。図4の凡例を見ると「氏名」が凡例項目に指定されている。VBAとは関係ないが、「凡例項目」を「科目」に指定したい場合、以下の手順を踏むといい。グラフの凡例を選択して、マウスの右クリックで表示されるメニューから[データの選択]を選択する。すると、図5の画面が表示される。データの選択画面で[行/列の切り替えを]クリックする図5の上下を見比べると凡例の項目が入れ替わっているのが分かる。実際には、図6のように表示され指定した通りに凡例が表示された。図4と凡例が入れ替わって表示されている凡例の背景を塗りつぶす色を指定する書式ActiveSheet.ChartObjects(1).Chart.Legend.Format.Fill.Visible=msoTrueActiveSheet.ChartObjects(1).Chart.Legend.Format.Fill.ForeColor.RGB=RGB({赤の割合},{緑の割合},{青の割合})ChartObjectsや「1」については、これまでと同様なので割愛する。凡例の背景を塗りつぶすには、Legend.Format.Fill.Visibleプロパティに「msoTrue」を指定する。次にForeColorオブジェクトのRGBプロパティにRGB関数で変換した色を指定する。MSDN」を参照してほしい。ここでは、図7のようにR、G、Bの値を入力できるセルを用意しておこう。R、G、Bの値を入力できるセルを用意するでは、実際にマクロを記述してみよう。"色の割合を入力してください。「凡例の背景を塗りつぶす」コード7行目では、凡例の背景を塗りつぶすためにLegend.Format.Fill.Visibleプロパティに「msoTrue」と指定している。8行目では、ForeColorオブジェクトのRGBプロパティにRGB関数で変換した色を指定する。変換した色は図7に用意したR、G、Bのセルに入力した値となる。3〜6行目では、ここに値が入力されていないと警告メッセージが表示されるようにしている。このマクロを図4の「凡例の背景色を設定」ボタンに関連付け実行すると、図8のように表示される。「凡例の背景色」が塗りつぶされる。ここでは「黄色」で塗りつぶした。凡例の背景色が黄色で塗りつぶされたグラフにデータラベルを表示/非表示にするHasDataLabelsプロパティ最後に、グラフにデータラベルを表示するについて解説する。記事「プレゼン/会議資料に生かす、Excelグラフの基本的な作り方」でもグラフにデータラベルを表示させる方法は解説しているが、今回はそれとは異なった方法でデータラベルを表示する。多くの方法を身に付けていただきたい。グラフにデータラベルを表示する書式{オブジェクト}.HasDataLabels=True{オブジェクト}には、Seriesオブジェクトを指定する。Seriesオブジェクトとはグラフのデータ系列を表すオブジェクトだ。SeriesオブジェクトのHasDataLabelsプロパティにTrueを指定することでデータラベルを表示できる。図8の適当な位置に「データラベル表示」と「データラベル非表示」という2つのボタンを用意しておこう(図9)。「データラベル表示」と「データラベル非表示」という2つのボタンを配置するModule1内に「データラベルを表示する」リスト4のコードを記述する。データラベルを表示するコード2行目でInteger型変数「i」を宣言し、3〜5行目で変数「i」を1から表示されているグラフのデータ系列の個数分反復処理を行う。要は、表示されている棒グラフの数だけ反復処理を行うということだ。SeriesCollectionオブジェクトは、指定されたグラフまたはグラフ種類グループにある全てのSeriesオブジェクトのコレクションを表す。反復処理の過程で4行目では、変数「i」に対応するグラフのデータ系列を表すSeriesCollectionオブジェクトのHasDataLabelsプロパティにTrueを指定してデータラベルを表示している。リスト4のマクロを図9の「データラベルの表示」ボタンに関連付け、また「データラベルの非表示」には次のリスト5のマクロを関連付ける。データラベルを非表示にするコード解説はリスト4と同じであるため省略する。HasDataLabelsプロパティにFalseを指定するだけだ。実行すると、図10のようにデータラベルがグラフ上に表示される。「データラベルの非表示」ボタンクリックでデータラベルを非表示にできる。データラベルがグラフ上に表示された簡単な方法を身に着けることで、効率良く業務に取り組もうタイトルを自分で指定した「タイトル名」にできるのは、便利なTipsではないかと思う。自動的に追加されるタイトルより自分で作成したデータにふさわしいタイトルを付ける方が、より分かりやすく資料として価値があるのではないだろうか。凡例の表示もExcel任せだ。時と場合によっては自分で任意の位置に表示させたい場合もあるだろう。そんな場合に役に立つTipsだと思う。読者の皆さんの日常業務に利用していただきたい。凡例の背景を塗りつぶすTipsは実際の業務に役立つかどうかはグラフ化するデータによるかもしれないが、このようなこともできることを知っておくのも損はない。グラフにデータラベルを表示するTipsは、先にも書いていたように以前の記事でも解説しているが、今回は別な表示方法を紹介した。データラベル一つを表示させるだけでもVBAにはいろいろな方法が存在する。筆者はできるだけ簡単な方法で実現できる方法を紹介している。結果が同じであれば、簡単な方法を身に着けることで効率良く業務に取り組めるのではないだろうか。読者の皆さんが、このTipsを参考にアレンジして役立ててほしい。Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。