折れ線、円、面、ドーナツ、3Dなど、さまざまな種類のExcelグラフの作り方VBA/マクロ便利Tips

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Shapes.AddChartメソッドを使った、折れ線、円、面、ドーナツ、3Dなどのグラフの表示方法や、Deleteメソッドを使ったグラフの削除の仕方を紹介。

» 2014年09月10日 18時00分 公開
[薬師寺国安PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


「Excelとグラフ」は「刺身とワサビ」

 今回から「グラフ」に関するTipsを何回かに分けて解説していく。「Excelとグラフ」は「刺身とワサビ」と同じくらいに、切っても切れない関係だ。文字データだけの資料より、視覚的に訴えるグラフの入った資料の方が、見る側の人間にはインパクトを与える。「Excelを利用する以上はグラフに関するVBAもマスターすることは、もう当たり前のことである」と筆者は思う。

 初回の今回は、最も基本的な、「グラフの表示」と「グラフの種類」の2つのTipsについて解説していこう。

最も基本的な「グラフの表示」

 初めはグラフの表示について解説する。グラフの表示については、記事「プレゼン/会議資料に生かす、Excelグラフの基本的な作り方」でも解説しているが、取り扱っているデータが異なるので、おさらいの意味で読んでほしい。

 図1のような「担当者」と「売上金額」が入力されたセルと、「グラフを表示」ボタンがあったとする。「グラフ表示」ボタンはExcelメニューの[挿入]→[図形]と選択して「角丸四角形」で作成している。

図1 「担当者」と「売上金額」が入力されたセルと、「グラフを表示」ボタンを配置する

 図1のデータを基に、「グラフを表示」ボタンをクリックしてグラフを表示してみよう。

 ここからは、マクロを記述してみよう。まず、VBE(Visual Basic Editor)のメニューから、[挿入]→[標準モジュール]と選択する。プロジェクトにModule1が追加されるので、Module1をダブルクリックして、表示されるエディター画面内に、リスト1のコードを記述する。

Option Explicit
Sub グラフを表示()
  Range("B3:C14").Select
  ActiveSheet.Shapes.AddChart
End Sub
リスト1 「グラフ」を表示するコード

 3行目でセル「B3」から「C14」までを選択している。この記述を忘れると、グラフは表示されないので、注意が必要だ。

 4行目では、アクティブシートに、AddChartメソッドでグラフを追加している。Shapesオブジェクトを使用すると、ワークシート上にオートシェイプを追加できる。VBAにおいてグラフはShapesオブジェクトの1つなのだ。

 このマクロを図1の「グラフを表示」ボタンに関連付け実行すると、図2のように表示される。グラフの位置は筆者が手動で移動させた。

図2 グラフが表示された

グラフを削除するDeleteメソッドと、さまざまな種類のグラフ表示

 グラフの種類についても上記記事で紹介しているが、今回は複数のグラフを比較表示しているので、再確認の意味で読んでほしい。グラフには、膨大な数の種類が存在する。種類については、上記記事の「ChartTypeプロパティで、円や折れ線などさまざまなグラフの種類を設定」を参照してほしい。

 新しく「グラフの種類」シートを追加し、図3のようなデータと、各種グラフのボタンを用意しておく。全てのグラフを表示させても意味がないため、主なグラフだけのボタンを用意した。

図3 グラフ用のデータと各種ボタンを配置している

 先ほど追加したModule1内に各種グラフを表示する、リスト2のコードを記述する。

Sub 折れ線グラフ()
  Range("C3:D9").Select
  If ActiveSheet.ChartObjects.Count > 0 Then
    ActiveSheet.ChartObjects(1).Delete
  Else
    ActiveSheet.Shapes.AddChart xlLine
  End If
End Sub
リスト2 各種グラフを表示するコード

 3行目で、アクティブなシート上にグラフが存在しているかどうかを、ChartObject.Countで判断し、グラフが表示されていない場合は、6行目でグラフの種類を指定して表示している。

 4行目の、「Sheet.ChartObjects(1).Delete」は、アクティブシート上にグラフが表示されていれば、それを削除して、新規にグラフを追加することを意味する。この記述を忘れると、グラフが重複して作成されることになり、何を表示したいのか分からなくなってしまう。

グラフを削除するDeleteメソッドの書式

Sheet.ChartObjects.Delete


 以下は、ほとんど「折れ線グラフ」と同じコードである。ActiveSheet.Shapes.AddChartに指定するグラフの種類が異なるので、異なる個所のみ記述した。

Sub 円グラフ()
〜コード略〜
  ActiveSheet.Shapes.AddChart xlPie
〜コード略〜
End Sub
Sub 三D円グラフ()
〜コード略〜
  ActiveSheet.Shapes.AddChart xl3DPie
〜コード略〜
End Sub
Sub 三Dピラミッド縦棒()
〜コード略〜
  ActiveSheet.Shapes.AddChart xlPyramidCol
〜コード略〜
End Sub
Sub 面グラフ()
〜コード略〜
  ActiveSheet.Shapes.AddChart xlArea
〜コード略〜
End Sub
Sub ドーナツグラフ()
〜コード略〜
  ActiveSheet.Shapes.AddChart xlDoughnut
〜コード略〜
End Sub

 ほとんどのプロシージャ内のコードは同じで、AddChartでグラフの種類のみを変えている。

 プロシージャ内で「3D円グラフ」を「三D円グラフ」としているのは、プロシージャ名の先頭に数値を指定すると、エラーになるため漢数字を使用している。

 実行すると、図4のようにいろいろなタイプのグラフが表示される。なおグラフの表示位置は筆者が手動で移動させた。グラフ表示位置の整え方については、次回以降のTipsで説明する。

図4 ボタンクリックで、各種グラフが表示された

いろいろな種類のグラフを使い分けよう

 今回は「グラフ」に関する、最も基本的なTipsを紹介した。図4を見てもらえば、資料の中にグラフがあるのとないのとでは、訴求力が全く違ってくるのが理解しやすいだろう。

 前述した記事「ChartTypeプロパティで、円や折れ線などさまざまなグラフの種類を設定」の表1を見ても分かるように、グラフには無数の種類がある、今回全てを紹介せず主なグラフだけを紹介したが、表1を参考にして、どのようなグラフが作成され、このグラフはどのようなデータに利用したらいいか、読者の皆さん自身で考えていただきたい。きっと、いいアイデアが思い浮かぶはずだ。

 今後数回にわたり、「グラフ」を利用する上いろいろな役に立ちそうなTipsを選んで紹介したいと思う。ぜひ、読者の皆さんの、会議の資料作成時に活用していただければうれしい。

著者プロフィール

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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