業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Shapes.AddChartメソッドを使った、折れ線、円、面、ドーナツ、3Dなどのグラフの表示方法や、Deleteメソッドを使ったグラフの削除の仕方を紹介。
今回から「グラフ」に関するTipsを何回かに分けて解説していく。「Excelとグラフ」は「刺身とワサビ」と同じくらいに、切っても切れない関係だ。文字データだけの資料より、視覚的に訴えるグラフの入った資料の方が、見る側の人間にはインパクトを与える。「Excelを利用する以上はグラフに関するVBAもマスターすることは、もう当たり前のことである」と筆者は思う。
初回の今回は、最も基本的な、「グラフの表示」と「グラフの種類」の2つのTipsについて解説していこう。
初めはグラフの表示について解説する。グラフの表示については、記事「プレゼン/会議資料に生かす、Excelグラフの基本的な作り方」でも解説しているが、取り扱っているデータが異なるので、おさらいの意味で読んでほしい。
図1のような「担当者」と「売上金額」が入力されたセルと、「グラフを表示」ボタンがあったとする。「グラフ表示」ボタンはExcelメニューの[挿入]→[図形]と選択して「角丸四角形」で作成している。
図1のデータを基に、「グラフを表示」ボタンをクリックしてグラフを表示してみよう。
ここからは、マクロを記述してみよう。まず、VBE(Visual Basic Editor)のメニューから、[挿入]→[標準モジュール]と選択する。プロジェクトにModule1が追加されるので、Module1をダブルクリックして、表示されるエディター画面内に、リスト1のコードを記述する。
Option Explicit Sub グラフを表示() Range("B3:C14").Select ActiveSheet.Shapes.AddChart End Sub
3行目でセル「B3」から「C14」までを選択している。この記述を忘れると、グラフは表示されないので、注意が必要だ。
4行目では、アクティブシートに、AddChartメソッドでグラフを追加している。Shapesオブジェクトを使用すると、ワークシート上にオートシェイプを追加できる。VBAにおいてグラフはShapesオブジェクトの1つなのだ。
このマクロを図1の「グラフを表示」ボタンに関連付け実行すると、図2のように表示される。グラフの位置は筆者が手動で移動させた。
グラフの種類についても上記記事で紹介しているが、今回は複数のグラフを比較表示しているので、再確認の意味で読んでほしい。グラフには、膨大な数の種類が存在する。種類については、上記記事の「ChartTypeプロパティで、円や折れ線などさまざまなグラフの種類を設定」を参照してほしい。
新しく「グラフの種類」シートを追加し、図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
3行目で、アクティブなシート上にグラフが存在しているかどうかを、ChartObject.Countで判断し、グラフが表示されていない場合は、6行目でグラフの種類を指定して表示している。
4行目の、「Sheet.ChartObjects(1).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で説明する。
今回は「グラフ」に関する、最も基本的な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.