業務効率化に役立つ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.
Coding Edge 鬯ョ�ォ�ス�ェ髯区サゑスソ�ス�ス�ス�ス�コ髣包スオ隴∵コキ�ク�キ�ス�ケ隴趣ス「�ス�ス�ス�ウ鬩幢ス「�ス�ァ�ス�ス�ス�ュ鬩幢ス「隴趣ス「�ス�ス�ス�ウ鬩幢ス「�ス�ァ�ス�ス�ス�ー