こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAでグラフを操作する方法を知っていますか?
グラフ作成、コピー、削除など、グラフを使うときに覚えておくと便利な操作は多いです。
そこで今回は、
・グラフを作成する方法
といった基礎的なことから、
・グラフの行列を入れ替える方法
・グラフタイトル・軸を設定する方法
・ファイル読み込み機能と組み合わせて自動化ツールを作る方法
といった応用的な方法まで、徹底的に解説します!
VBAでグラフを操作する方法
最初に、グラフを操作する方法について解説します!
グラフ作成方法
まずは、グラフを作成する方法です。
グラフを作成する場合は、以下のように書きます。
グラフ作成方法:
With ActiveSheet.Shapes.AddChart.Chart .ChartType = グラフの種類 .SetSourceData Rangeのセル範囲 End With
グラフの種類に設定する値一覧:
No | 値 | グラフの種類 |
---|---|---|
1 | xlColumnClustered | 集合縦棒 |
2 | xlLine | 折れ線 |
3 | xlPie | 円 |
4 | xlDoughnut | ドーナツ |
5 | xlArea | 面 |
6 | xlXYScatter | 散布図 |
7 | xlRadar | レーダー |
棒グラフを作成するサンプルコードを用意しました。
Excelデータ:
サンプルコード:
Sub Test1() With ActiveSheet.Shapes.AddChart.Chart '棒グラフ追加 .ChartType = xlColumnClustered .SetSourceData Range("A1:G8") End With End Sub
実行結果:
このように、簡単にグラフを作ることができます。
行列を入れ替える方法
先ほどグラフはX軸が言語、Y軸が名前になっていますが、X軸が名前の方が誰がどの言語で何点取っているかわかりやすいですよね。
行列を入れ替えれば簡単に変更することができるので、おすすめです!
行列を入れ替える方法:
Select Case .PlotBy Case xlRows .PlotBy = xlColumns Case xlColumns .PlotBy = xlRows End Select
先ほどのコードを書き換えると、以下のようになります。
行列入れ替え後のコード:
Sub Test2() With ActiveSheet.Shapes.AddChart.Chart '棒グラフ追加 .ChartType = xlColumnClustered .SetSourceData Range("A1:G8") '行列入れ替え Select Case .PlotBy Case xlRows .PlotBy = xlColumns Case xlColumns .PlotBy = xlRows End Select End With End Sub
実行結果:
グラフタイトル設定方法
グラフ作成後は、グラフのタイトルを設定しますよね。
グラフタイトルを追加する場合は、以下のように書きます。
グラフタイトル追加方法
.HasTitle = True 'グラフタイトルの追加 .ChartTitle.Text = "" 'グラフタイトルの変更
先ほどのコードに追加すると、以下のようになります。
グラフタイトル追加後のコード:
Sub Test3() With ActiveSheet.Shapes.AddChart.Chart '棒グラフ追加 .ChartType = xlColumnClustered .SetSourceData Range("A1:G8") 'グラフタイトル追加 .HasTitle = True 'グラフタイトルの追加 .ChartTitle.Text = "ユーザー別・言語別点数一覧" 'グラフタイトルの変更 '行列入れ替え Select Case .PlotBy Case xlRows .PlotBy = xlColumns Case xlColumns .PlotBy = xlRows End Select End With End Sub
実行結果:
軸設定方法
データは軸の最小値、最大値を設定したほうが見栄えが良くなりますよね。
軸の最小値、最大値は以下のように書くことで設定できます。
軸の最小値・最大値の設定方法:
.Axes(xlValue).MinimunScale = 値 .Axes(xlValue).MaximumScale = 値
今回は点数なので、0点を最小値、100点を最大値に変更しました。 軸の最小値・最大値変更後のコード:
Sub Test4() With ActiveSheet.Shapes.AddChart.Chart '棒グラフ追加 .ChartType = xlColumnClustered .SetSourceData Range("A1:G8") 'グラフタイトル追加 .HasTitle = True 'タイトルの追加 .ChartTitle.Text = "ユーザー別・言語別点数一覧" 'タイトル名の変更 '軸の最小値・最大値変更 .Axes(xlValue).MaximumScale = 100 .Axes(xlValue).MinimumScale = 0 '行列入れ替え Select Case .PlotBy Case xlRows .PlotBy = xlColumns Case xlColumns .PlotBy = xlRows End Select End With End Sub
実行結果:
グラフの参照範囲変更方法
グラフ作成後に、参照範囲を変更したいケースもありますよね。
参照範囲を変更する場合は、以下のように書きます。
参照範囲変更方法:
.SetSourceData Source:=参照範囲をRangeで指定
先ほどのコードに追加すると、以下のようになります。
参照範囲を変更後のコード:
Sub Test5() With ActiveSheet.Shapes.AddChart.Chart '棒グラフ追加 .ChartType = xlColumnClustered .SetSourceData Range("A1:G8") 'グラフタイトル追加 .HasTitle = True 'タイトルの追加 .ChartTitle.Text = "ユーザー別・言語別点数一覧" 'タイトル名の変更 '軸の最小値・最大値変更 .Axes(xlValue).MaximumScale = 100 .Axes(xlValue).MinimumScale = 0 '参照範囲の変更 .SetSourceData Source:=Range("A1:D8") '行列入れ替え Select Case .PlotBy Case xlRows .PlotBy = xlColumns Case xlColumns .PlotBy = xlRows End Select End With End Sub
実行結果:
合わせて覚えておくと便利なマクロの記録とは
ここまでグラフを作成する方法を解説してきましたが、グラフの種類は棒グラフ以外にもたくさんありますよね。
ChartTypeで指定できるものの、種類が多すぎるためすべて覚えるのは難しいです。
そんな時におすすめなのが、マクロの記録機能です。
マクロの記録を使えば、グラフ作成の操作を自動でVBAのコードに変換することができます。
今回解説したグラフタイトル、軸変更以外にも様々な操作をVBAのコードにすることができるので、事前に作るイメージが決まっている場合はマクロの記録を使うのがおすすめです!
以下で使い方を詳しく解説しているので、気になる方は見てみてくださいね!
ファイル読み込み機能を組み合わせて自動化ツールを作る方法
グラフ作成方法とあわせてファイルを読み込む方法を覚えておけば、「CSVファイル読み込み→取り込んだデータから自動でグラフ作成」のような、自動化ツールが作れるようになります。
自動化ツールができれば、作業時間を大幅に短縮することができるので、合わせて覚えておくのがおすすめです!
ファイル読み込み方法については以下で詳しく解説しているので、気になる方は以下を見てみてくださいね!
補足:作成したグラフを画像にして保存する方法
作成したグラフはExcelだけでなくPowerPointやWordなど別の資料作成に使うケースもよくありますよね。
作成したグラフは以下のように書くことで、簡単に画像保存することができるので、覚えておくのがおすすめです!
グラフを画像で保存するサンプルコード:
Sub Test5() ActiveSheet.ChartObjects(“グラフの名前”).Chart.Export _ ThisWorkbook.Path & "保存するファイル名.jpg" End Sub
グラフの名前は、以下のようにExcel上でグラフを選択すると、確認することができます。
まとめ
今回は、VBAでグラフを作る方法について解説しました。
VBAでグラフを作ることができれば、データから自動でグラフを作るツールを作れるようになります。
使い方も簡単なので、ぜひ使ってみてくださいね!