VBAでグラフ作成 (e2g)
VBAではない普通の グラフ作成入門 はこちら → (e3c) グラフ作成
グラフをたくさん作る用途に便利な、VBAでグラフを作成する方法を説明します
(1) 表を準備します
- セルB2からD7まで下図のようなデータを作成します
- B2からD7のデータを2つのグラフにします

(2) VBEの世界へ
- ワークシート側から[Alt]キーを押したまま、[F11]キーを押します
この方法が使えない場合は
- Excel2007:
[開発]タブ → [コード]グループ → [Visual Basic]
- Excel2003:
[ツール(T)]メニュー→[マクロ(M)]→[Visual Basic Editor(V)]
-
VBEの世界に入ったら、左側にプロジェクト・エクスプロラーがあることを確認します。
なければ、[表示(V)]メニュー → [プロジェクト・エクスプロラー] で表示させます
- [挿入(I)]メニュー → [標準モジュール(M)] を選択します
- これで画面の右側に白いシートが表示されます
- 下のコードをコピーして、右側の白いシートに貼り付けます
(3) コード
Sub RunGraph()
UGraph "b2:c7", 0, 120, 250, 150
UGraph "b2:b7,d2:d7", 250, 120, 250, 150
End Sub
Sub UGraph(rng, L, T, W, H)
With ActiveSheet.ChartObjects.Add(L, T, W, H)
.Chart.ChartType = xlColumnClustered
.Chart.SetSourceData Source:=ActiveSheet.Range(rng), _
PlotBy:=xlColumns
.Chart.Location Where:=xlLocationAsObject, Name:="Sheet1"
End With
End Sub
-
注意)SetSourceData■Source:= の
■は半角スペースです
-
注意)ActiveSheet.Range(rng),■_の
■_は
半角スペースとアンダースコアで
行の継続の意味 があります
(4) VBAを実行します
- ワークシートの画面から [Alt] + [F8] キーを押します
この方法が使えない場合は
- Excel2007:
[開発]タブ → [コード]グループ → [マクロ]
- Excel2003:
[ツール(T)]メニュー → [マクロ(M)] → [マクロ(M)]
- VBAを選択する画面に変わります
- ここで RunGraph を選択して実行します
- うまく実行できれば下図のようにグラフが2つできます

- グラフは上の表データとリンクしています、表の値を変更すると、グラフも変化します
- したがって、数値が変わってもグラフ作成VBAを何度も実行する必要はありません
(5) VBA実行前後
- 何度も実行するとグラフがいくつも同じ場所に重なって作成されます
- 作ったグラフを消すには、グラフの輪郭の少し内側をクリックしてから[Delete]キーを押します
- 何か問題があって途中で止まってしまったら、VBE側で実行メニュー:[リセット]を選択します
(6) VBAの解説
- Sub RunGraph() から 4行目の End Sub
までがメインのプロシジャでこれをワークシート側から呼び出して実行します
- この中で UGraph というサブプロシジャを2回呼び出しています
- UGraph "b2:c7",0,120,250,150
でデータのアドレスとグラフを描くべき位置をサブプロシジャのUGraphに渡します
- 実際にグラフを作成する処理は Sub UGraph(rng ...)
から最後の End Sub の間にあります
- その中の ActiveSheet.ChartObjects.Add(L,T,W,H) が肝心のグラフを作成する命令です
(7) 拡張
- ChartObjects.Add(L,T,W,H)
- L はグラフオブジェクトのleft左上の座標
- T はTop上からの座標
- W はWidthで幅
- H はHeight高さの意味です
- グラフを描いている部分(PlotArea)の位置や幅を決めることもできます(下例)
- .Chart.PlotArea.Left = 0
- .Chart.PlotArea.Top = 0
(8) 注意
- [2軸縦棒]などの複雑なグラフはグラフを描く命令が異なります
- Charts.Add ActiveChart.ApplyCustomType ChartType:=xlBuiltIn,
TypeName:="2 軸上の折れ線と縦棒"
- のようなコードになり、残念ながら
ChartObjects.Add(L,T,W,H)のようなLeft,Top,Width,Height指定は使えません
2022/01/21:更新 2003/04/28:登録 訪問者: