VBAを使ったグラフの作成【 初心者向けの基本事項を紹介 】

Left Caption

豆父ちゃん

エクセル作業でグラフの作成にかなり時間がかかっている。VBAを使って自動化したい。

そんな方のために、VBAによるグラフ作成の基本的な操作方法を紹介します。


 

グラフの作成はVBAを使った方がいい理由

私は、電気料金の集計をまとめる業務を毎月行っていて、その集計表にいつもグラフを添えて資料を作っていました。月に1回の作業なので手作業で行っていましたが、手間がかかりかなりの時間を使っていました。

今では電気料金を入力すると、集計とグラフの作成を一瞬で処理するVBAを開発したので一瞬で作業を終えることができます。

VBAによるグラフ作成のメリット

 

  • 単純作業
  • 一度VBAを導入すればずっと使える
  • 作業時間を大幅に短縮できる

グラフ作成のような機械的な作業はVBAを使って自動化しましょう。

 

グラフの種類

番号 入力する値 グラフの種類
1 xlColumnClustered 棒グラフ
2 xlPie 円グラフ
3 xlLine 折れ線グラフ
4 xlArea 面グラフ
5 xlDoughnut 棒グラフ
6 xlXYScatter 散布図
7 xlRadar レーダー

 

グラフの挿入

上記のような簡単な表からグラフを作成します。

1 Sub グラフ作成
2 With ActiveSheet.Shapes.AddChart.Chart
3 .ChartType = xlLine
4 .SetSourceData Range(“A1:C5")
5 End With
6 End Sub

2行目のWithから5行目のEnd Withまでがグラフ作成のVBAです。この中にタイトルの表示設定やグラフ表示位置の設定などを加えていきます。

3行目のグラフの種類をxlLine → xlColumnClusteredに変更すると下記のようになります。

 

凡例項目(系列)の調整

上図の右側の「月」という項目が不要なので削除することにします。

1 Sub グラフ作成
2 With ActiveSheet.Shapes.AddChart.Chart
3 .ChartType = xlColumnClustered
4 .SetSourceData Range(“A1:C5")
5 .FullSeriesCollection(1).Delete
6 End With
7 End Sub

5行目の.FullSeriesCollection(1).Deleteが系列の1つ目を削除するということです。グラフを作成すると下記のようになります。

不要なものが消えてスッキリしました。(1)を(2)にすれば系列の2つ目を削除することができます。グラフが思い通り表示されないときの微調整にとても便利なプログラムです。

 

グラフのX軸【タイトル設定】

X軸にタイトルを表示させます。下記のプログラムは先ほどの表から作成したグラフに「月」というX軸タイトルを追加するものです。

1 Sub グラフ作成
2 With ActiveSheet.Shapes.AddChart.Chart
3 .ChartType = xlColumnClustered
4 .SetSourceData Range(“A1:C5")
5 .FullSeriesCollection(1).Delete
6 .Axes(xlCategory, xlPrimary).HasTitle = True
7 .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = “月"
8 End With
9 End Sub

6行目と7行目がX軸タイトル「月」を表示させるVBAです。実行して作成したグラフは下記のようになります。

 

軸の種類

 

  • xlCategory → X軸
  • xlValue → Y軸
  • xlSeriesAxis → Z軸(3Dグラフ)

軸のグループ

 

  • xlPrimary → 第1軸
  • xlSecondary → 第2軸

タイトルの表示設定

 

  • True → 表示する
  • False → 非表示にする

 

グラフのY軸【タイトル設定】

Y軸にタイトルを表示させます。下記のプログラムは先ほどの表から作成したグラフに「金額」というY軸タイトルを追加するものです。

1 Sub グラフ作成
2 With ActiveSheet.Shapes.AddChart.Chart
3 .ChartType = xlColumnClustered
4 .SetSourceData Range(“A1:C5")
5 .FullSeriesCollection(1).Delete
6 .Axes(xlCategory, xlPrimary).HasTitle = True
7 .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = “月"
8 .Axes(xlValue, xlPrimary).HasTitle = True
9 .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = “金額"
10 End With
11 End Sub

8行目と9行目がY軸タイトル「金額」を表示させるVBAです。実行して作成したグラフは下記のようになります。

 

グラフのタイトル設定

グラフ事態のタイトルを表示させます。下記のプログラムは先ほどの表から作成したグラフに「収入・支出」というタイトルを追加するものです。

1 Sub グラフ作成
2 With ActiveSheet.Shapes.AddChart.Chart
3 .ChartType = xlColumnClustered
4 .SetSourceData Range(“A1:C5")
5 .FullSeriesCollection(1).Delete
6 .Axes(xlCategory, xlPrimary).HasTitle = True
7 .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = “月"
8 .Axes(xlValue, xlPrimary).HasTitle = True
9 .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = “金額"
10 .HasTitle = True
11 .ChartTitle.Text = “収入・支出"
12 End With
13 End Sub

10行目と11行目がグラフタイトル「収入・支出」を表示させるVBAです。実行して作成したグラフは下記のようになります。

 

グラフ表示位置の設定

parentプロパティを使用して表示位置の設定を行います。parentとは、階層関係の上位(親)に該当するオブジェクトを返すものです。

下記はセルB8にグラフを表示するものです。

1 Sub グラフ作成
2 Dim Po As Range
3 Set Po = ActiveSheet.Cells(8, 2)
4 With ActiveSheet.Shapes.AddChart.Chart
5 .ChartType = xlColumnClustered
6 .SetSourceData Range(“A1:C5")
7 .FullSeriesCollection(1).Delete
8 .Axes(xlCategory, xlPrimary).HasTitle = True
9 .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = “月"
10 .Axes(xlValue, xlPrimary).HasTitle = True
11 .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = “金額"
12 .HasTitle = True
13 .ChartTitle.Text = “収入・支出"
14 .Parent.Top = Po.Top
15 .Parent.Left = Po.Left
16 End With
17 End Sub

2行目と3行目が「Po」という変数を宣言。14行目と15行目が変数「Po」を使ってChartObjectを表示するというVBAです。

 

グラフ作成のVBAを実行したとき、作成したグラフが変な場所に表示されるはずです。これではいくらキレイなグラフを作れても実行の都度グラフを移動させなければいけません。こんな手間を省くために表示位置の設定はしっかり行いましょう。