こんにちは、Ryoです。
Excelを扱う中でグラフを作成することはかなり多いと思いますが、VBAでもAddメソッドやChartTypeプロパティなどでグラフ作成やグラフシートの追加を行うことができますので、今回はその内容について書いていきます。
1.サンプル概要
Sheet1にサンプルとして作成した表に対し、グラフの作成とグラフシートの追加を行っていきます。

グラフの種類を「集合縦棒」として実行した結果が以下になります。作成するグラフの位置は指定できるので、表の中央付近で下側に表示させています。

次は同じ表を指定し、「グラフシート」を作成します。

以上がサンプル概要になります。
2.サンプルコード
◆グラフの作成
Sub Sample1()
'グラフを作成する
With Worksheets("Sheet1").ChartObjects. _
Add(50, 110, 250, 180).Chart
'セルA2を起点とする表のデータ範囲を取得
.SetSourceData Range("A2").CurrentRegion
'グラフ種類を「集合縦棒」として設定
.ChartType = xlColumnClustered
End With
End Sub
≪Addメソッドの構文≫
オブジェクト.Add(Left, Top, Width, Height)
≪SetSourceDataメソッドの構文≫
オブジェクト.SetSourceData(Source, PlotBy)
≪ChartTypeプロパティの構文≫
オブジェクト.ChartType = expression
AddメソッドはオブジェクトにChartObjectsオブジェクトを指定してグラフを作成することができるもので引数のLeftはグラフ左端の位置、引数Topはグラフ上端の位置をワークシート左上端からの距離をポイント単位で指定し、引数Widthと引数Heightはグラフの幅と高さを指定するものです。
SetSourceDataメソッドは引数Sourceにグラフの元となるデータを指定します。(PlotByはプロット方向を指定するものです)
ChartTypeプロパティについてはグラフの種類をXlChartTypeクラスの定数で指定するもので、以下になります。
| 名前 | 値 | 内容 |
| xl3DArea | -4098 | 3-D 面 |
| xl3DAreaStacked | 78 | 3-D 積み上げ面 |
| xl3DAreaStacked100 | 79 | 100% 積み上げ面 |
| xl3DBarClustered | 60 | 3-D 集合横棒 |
| xl3DBarStacked | 61 | 3-D 積み上げ横棒 |
| xl3DBarStacked100 | 62 | 3-D 100% 積み上げ横棒 |
| xl3DColumn | -4100 | 3-D 縦棒 |
| xl3DColumnClustered | 54 | 3-D 集合縦棒 |
| xl3DColumnStacked | 55 | 3-D 積み上げ縦棒 |
| xl3DColumnStacked100 | 56 | 3-D 100% 積み上げ縦棒 |
| xl3DLine | -4101 | 3-D 折れ線 |
| xl3DPie | -4102 | 3-D 円 |
| xl3DPieExploded | 70 | 分割 3-D 円 |
| xlArea | 1 | 分野 |
| xlAreaStacked | 76 | 積み上げ面 |
| xlAreaStacked100 | 77 | 100% 積み上げ面 |
| xlBarClustered | 57 | 集合横棒 |
| xlBarOfPie | 71 | 補助縦棒グラフ付き円 |
| xlBarStacked | 58 | 積み上げ横棒 |
| xlBarStacked100 | 59 | 100% 積み上げ横棒 |
| xlBubble | 15 | バブル |
| xlBubble3DEffect | 87 | 3-D 効果付きバブル |
| xlColumnClustered | 51 | 集合縦棒 |
| xlColumnStacked | 52 | 積み上げ縦棒 |
| xlColumnStacked100 | 53 | 100% 積み上げ縦棒 |
| xlConeBarClustered | 102 | 集合円錐型横棒 |
| xlConeBarStacked | 103 | 積み上げ円錐型横棒 |
| xlConeBarStacked100 | 104 | 100% 積み上げ円錐型横棒 |
| xlConeCol | 105 | 3-D 円錐型縦棒 |
| xlConeColClustered | 99 | 集合円錐型縦棒 |
| xlConeColStacked | 100 | 積み上げ円錐型縦棒 |
| xlConeColStacked100 | 101 | 100% 積み上げ円錐型縦棒 |
| xlCylinderBarClustered | 95 | 集合円柱型横棒 |
| xlCylinderBarStacked | 96 | 積み上げ円柱型横棒 |
| xlCylinderBarStacked100 | 97 | 100% 積み上げ円柱型横棒 |
| xlCylinderCol | 98 | 3-D 円柱型縦棒 |
| xlCylinderColClustered | 92 | 集合円錐型縦棒 |
| xlCylinderColStacked | 93 | 積み上げ円錐型縦棒 |
| xlCylinderColStacked100 | 94 | 100% 積み上げ円柱型縦棒 |
| xlDoughnut | -4120 | ドーナツ |
| xlDoughnutExploded | 80 | 分割ドーナツ |
| xlLine | 4 | 折れ線 |
| xlLineMarkers | 65 | マーカー付き折れ線 |
| xlLineMarkersStacked | 66 | マーカー付き積み上げ折れ線 |
| xlLineMarkersStacked100 | 67 | マーカー付き 100% 積み上げ折れ線 |
| xlLineStacked | 63 | 積み上げ折れ線 |
| xlLineStacked100 | 64 | 100% 積み上げ折れ線 |
| xlPie | 5 | 円 |
| xlPieExploded | 69 | 分割円 |
| xlPieOfPie | 68 | 補助円グラフ付き円 |
| xlPyramidBarClustered | 109 | 集合ピラミッド型横棒 |
| xlPyramidBarStacked | 110 | 積み上げピラミッド型横棒 |
| xlPyramidBarStacked100 | 111 | 100% 積み上げピラミッド型横棒 |
| xlPyramidCol | 112 | 3-D ピラミッド型縦棒 |
| xlPyramidColClustered | 106 | 集合ピラミッド型縦棒 |
| xlPyramidColStacked | 107 | 積み上げピラミッド型縦棒 |
| xlPyramidColStacked100 | 108 | 100% 積み上げピラミッド型横棒 |
| xlRadar | -4151 | レーダー |
| xlRadarFilled | 82 | 塗りつぶしレーダー |
| xlRadarMarkers | 81 | データ マーカー付きレーダー |
| xlRegionMap | 140 | マップ グラフ。 |
| xlStockHLC | 88 | 高値 – 安値 – 終値 |
| xlStockOHLC | 89 | 始値 – 高値 – 安値 – 終値 |
| xlStockVHLC | 90 | 出来高 – 高値 – 安値 – 終値 |
| xlStockVOHLC | 91 | 出来高 – 始値 – 高値 – 安値 – 終値 |
| xlSurface | 83 | 3-D 表面 |
| xlSurfaceTopView | 85 | 表面 (トップ ビュー) |
| xlSurfaceTopViewWireframe | 86 | 表面 (トップ ビュー – ワイヤーフレーム) |
| xlSurfaceWireframe | 84 | 3-D 表面 (ワイヤーフレーム) |
| xlXYScatter | -4169 | 散布図 |
| xlXYScatterLines | 74 | 折れ線付き散布図 |
| xlXYScatterLinesNoMarkers | 75 | 折れ線付き散布図 (データ マーカーなし) |
| xlXYScatterSmooth | 72 | 平滑線付き散布図 |
| xlXYScatterSmoothNoMarkers | 73 | 平滑線付き散布図 (データ マーカーなし) |
サンプルでは集合縦棒のxlColumnClusteredを指定していますが、上の表内の値を指定して.ChartType = 51の記述にしても同様の処理ができます。
◆グラフシートの追加
Sub Sample2()
'グラフシートを追加する
With Charts.Add(After:=Worksheets("Sheet1"))
'ワークシート「Sheet1」のセルA2を起点とする
'表のデータ範囲を取得
.SetSourceData Worksheets("Sheet1"). _
Range("A2").CurrentRegion
'グラフ種類を「集合縦棒」として設定
.ChartType = xlColumnClustered
End With
End Sub
≪Chartsオブジェクトの構文≫
オブジェクト.Charts
≪Addメソッドの構文≫
オブジェクト.Add(Before, After, Count)
Chartsオブジェクト=グラフシートを表しますので、Addメソッドでグラフシートの作成を行っています。Addメソッドの引数Before/Afterは指定したシートの左側(=Before)、右側(=After)にグラフシートを作成するもので、引数Countは追加するChartオブジェクトを指定します。
サンプルでは「Sheet1」のデータを元にしてグラフシートを作成しています。処理の流れとしてはAddメソッドでからのグラフシート作成→データ指定→グラフ指定となります。
◆参考:グラフシートのカウント処理
ワークシートの数をカウントする際に「Worksheets.Count」を記述して使用しますが、この場合「グラフシートはカウントされません」のでグラフシートを含めてシート数を取得したい場合は「Sheets.Count」とすればOKです。
3.まとめ
VBAでデータ集計などを行う際にグラフとして出力したいケースは多々ありますので、グラフ作成やグラフシート追加の手段を知っておくと有用なケースが多いと思います。
今回サンプルとして紹介したようにグラフ出力するだけれあれば特に難しいこともありませんので、機会があればぜひご活用くださいませ。
以上、グラフ作成/グラフシートの追加を行う方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

