グラフを作成するVBAは難しい!【 多数のサンプル比較でわかりやすく紹介 】
そんな方のために、いろんなサンプルVBAを使って作り方を紹介します。
目次
VBAによるグラフの作成が難しい理由
グラフの種類やタイトルの表示など、グラフ作成に必要な基本的な知識を身につけてもグラフの作成は難しい。
なぜなら、ネットや参考書でグラフ作成に関する資料が少ないからです。グラフの作り方を紹介しているものを見つけたとしても、紹介例の集計表とあたなが作ろうとしているグラフの集計表が少しでも異なるとVBAを大きく変更しなければなりません。
- 集計表のセルが結合されていて取得したい値が隣同士にない
- 取得した値のX軸とY軸を反転させたい
- グラフの色を変更したい
このような処理をしたくてもなかなかうまくいきませんでした。
いろんなパターンのサンプルVBAがあればいろんな処理ができるようになります。私が作成したエクセル家計簿ではいろんなパターンのグラフを表示させているので、サンプルとして紹介します。
下記の記事では、VBAによるグラフ作成の基本的な方法について紹介しています。
VBAによるグラフ作成 棒グラフ
エクセル家計簿では「集計シート表」から棒グラフを作成してます。
1 | Sub 棒グラフ() |
2 | '変数の宣言 |
3 | Dim Po As Range |
4 | Set Po = ActiveSheet.Cells(3, 22) |
5 | Dim Ta As Range |
6 | Dim Ta2 As Range |
7 | 'オブジェクトの削除 |
8 | For Each sa In ActiveSheet.Shapes |
9 | On Error Resume Next |
10 | If sa.TopLeftCell.Address >= ActiveSheet.Cells(1, 1).Address Then |
11 | sa.Delete |
12 | End If |
13 | If Err <> 0 Then |
14 | Err.Clear |
15 | End If |
16 | Next |
17 | '棒グラフの作成 |
18 | With ActiveSheet.Shapes.AddChart.Chart |
19 | .ChartType = xlColumnClustered |
20 | .SetSourceData Source:=ActiveSheet.Range(“AN3:AN4,AQ3:AQ4") |
21 | 'タイトル追加 |
22 | .HasTitle = True |
23 | .ChartTitle.Text = “収入・支出" |
24 | '表示位置の調整 |
25 | .Parent.Top = Po.Top |
26 | .Parent.Left = Po.Left |
27 | '項目の表示設定 |
28 | .HasLegend = False |
29 | .Axes(xlCategory).HasTitle = False |
30 | '色の調整 |
31 | .FullSeriesCollection(1).Points(1).Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent2 |
32 | .FullSeriesCollection(1).Points(2).Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent5 |
33 | End With |
34 | End Sub |
7行目から16行目まではオブジェクトを削除するプログラムです。この削除プログラムがなければVBAを実行するたびにグラフが表示され積み重ねられてしまいます。それを防ぐためにVBAを実行すると、Sheet内のオブジェクトを全て削除するプログラムを最初に記載します。
19行目はグラフの種類を選択しています。 .ChartType = xlColumnClusteredで棒グラフを作成するという意味です。
20行目のグラフの選択範囲でRange(“AN3:AN4,AQ3:AQ4")になっているのは、集計表から参照した値がせるの結合により離れているためです。
参照したい値が隣通しになっていない場合に記載する方法で、よく使われるので覚えておくといいでしょう。
31行目と32行目は色の調整を行っています。エクセル家計簿では複数の項目でグラフを作成しているので、全体の見栄えをよくするために色の調整を行っています。
グラフの範囲指定で使われている関数Unionについて下記の記事で詳しく紹介しています。
VBAによるグラフ作成 積み上げ棒グラフ
エクセル家計簿では「項目別集計シート表」から積み上げ棒グラフを作成してます。
1 | Sub 積み上げ棒グラフ() |
2 | '変数の宣言 |
3 | Dim Po As Range |
4 | Set Po = ActiveSheet.Cells(15, 22) |
5 | Dim Ta As Range |
6 | 'オブジェクトの削除 |
7 | For Each sa In ActiveSheet.Shapes |
8 | On Error Resume Next |
9 | If sa.TopLeftCell.Address >= ActiveSheet.Cells(1, 1).Address Then |
10 | sa.Delete |
11 | End If |
12 | If Err <> 0 Then |
13 | Err.Clear |
14 | End If |
15 | Next |
16 | '積み上げ棒グラフの作成 |
17 | With ActiveSheet.Shapes.AddChart.Chart |
18 | .ChartType = xlColumnStacked |
19 | Set Ta = Union(Range(Cells(3, 47), Cells(34, 47)), Range(Cells(3, 48), Cells(34, 51))) |
20 | .SetSourceData Source:=Ta |
21 | .FullSeriesCollection(1).Delete |
22 | 'タイトル追加 |
23 | .HasTitle = True |
24 | .ChartTitle.Text = “項目別支出" |
25 | '表示位置の調整 |
26 | .Parent.Top = Po.Top |
27 | .Parent.Left = Po.Left |
28 | End With |
29 | End Sub |
19行目と20行目はグラフの選択範囲を示すプログラムです。Union関数でRange(Cells(3, 47), Cells(34, 47))の範囲と Range(Cells(3, 48), Cells(34, 51))の範囲を合体し、変数Taに格納するということ意味です。格納した変数Taをグラフの参照範囲とすればグラフが作成されます。
21行目は凡例の項目を1つ削除するという意味です。このプログラムを記載しなければ、範囲指定した一番左上の「日付/項目」が凡例で表示されてしまいます。
VBAによるグラフ作成 円グラフ
エクセル家計簿では「細目別集計シート表」から円グラフを作成してます。
1 | Sub 円グラフ() |
2 | '変数の宣言 |
3 | Dim Po As Range |
4 | Set Po = ActiveSheet.Cells(38, 22) |
5 | Dim Ta As Range |
6 | Dim Ta2 As Range |
7 | 'オブジェクトの削除 |
8 | For Each sa In ActiveSheet.Shapes |
9 | On Error Resume Next |
10 | If sa.TopLeftCell.Address >= ActiveSheet.Cells(1, 1).Address Then |
11 | sa.Delete |
12 | End If |
13 | If Err <> 0 Then |
14 | Err.Clear |
15 | End If |
16 | Next |
17 | With ActiveSheet.Shapes.AddChart.Chart |
18 | .ChartType = xlPie |
19 | Set Ta = Range(Cells(37, 48), Cells(37, retu2)) |
20 | Set Ta2 = Range(Cells(69, 48), Cells(69, retu2)) |
21 | .SetSourceData Source:=Union(Ta, Ta2) |
22 | 'タイトル追加 |
23 | .HasTitle = True |
24 | .ChartTitle.Text = “細目別支出" |
25 | .Parent.Top = Po.Top |
26 | .Parent.Left = Po.Left |
27 | .DataLabels.ShowPercentage = True |
28 | .SeriesCollection(1).DataLabels.ShowPercentage = True |
29 | .SeriesCollection(1).ApplyDataLabels ShowPercentage:=True, ShowValue:=False |
30 | End With |
31 | End Sub |
グラフの作成はVBAによる自動化がおすすめ
グラフの作成作業は決められた一覧表から作成する場合がほとんどですよね。
私の職場では、ここからここまでのセルを選択して、「Alt」+「F1ボタン」で…!のようなグラフを作成する説明書が作られていて、その通り資料を作るということをしていました。
説明書の通りのVBAを作ってしまえばこの仕事は一瞬で処理することができます。
グラフ作成のような機械的なエクセル業務はVBAを使って自動化してしまいましょう。
下記の記事でエクセル業務のシステム化について紹介しています。エクセル業務の効率をあげたいという方は是非チェックしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません