こんにちは!今回は、Excel VBAを使ってデータ範囲からグラフを自動生成する方法をご紹介します。VBAを活用することで、グラフの作成や更新を効率化し、自動化が簡単に行えます。
今回のコードでは、新しいグラフを作成する前に前回のグラフを削除するため、コードを連続して実行しても問題ありません。これにより、前のグラフが残らず、毎回新しいグラフが正しく生成されます。柔軟なデータ範囲指定やエラーハンドリングも含まれており、作業効率を大幅に向上させます。
使用するデータリスト
まず使用するデータリストについて解説します。データリストは「データリスト」のワークシート上に、「№」「品種」「単価」「金額」という構成となっており、今回はデータを5行分作成しました。
VBAの実行結果
VBAを実行した結果下図のような結果を得る事が出来ます。
今回は「品種」と「金額」を使った棒グラフを作成しています。
コード解説★★★(コピーはここ)★★★
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Sub Sample12() Dim wsGraph As Worksheet, wsData As Worksheet Dim dataRange1 As Range, dataRange2 As Range ' ワークシートとデータ範囲を指定 Set wsGraph = Worksheets("グラフ表示") Set wsData = Worksheets("データリスト") Set dataRange1 = wsData.Range("B1:B6") Set dataRange2 = wsData.Range("E1:E6") ' グラフ作成のサブルーチンを呼び出す Call CreateChart(wsGraph, wsData, dataRange1, dataRange2) End Sub Sub CreateChart(wsGraph As Worksheet, wsData As Worksheet, dataRange1 As Range, dataRange2 As Range) On Error GoTo ErrorHandler Dim chartObj As ChartObject ' 前回作成したグラフを削除 If wsGraph.ChartObjects.Count > 0 Then wsGraph.ChartObjects.Delete End If ' グラフの作成 Set chartObj = wsGraph.ChartObjects.Add(20, 20, 235, 150) With chartObj.Chart .ChartType = xlColumnClustered .SetSourceData Source:=Union(dataRange1, dataRange2) .HasLegend = False End With Exit Sub ErrorHandler: MsgBox "エラーが発生しました: " & Err.Description End Sub |
解説
設定の入力
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub Sample12() Dim wsGraph As Worksheet, wsData As Worksheet Dim dataRange1 As Range, dataRange2 As Range ' ワークシートとデータ範囲を指定 Set wsGraph = Worksheets("グラフ表示") Set wsData = Worksheets("データリスト") Set dataRange1 = wsData.Range("B1:B6") Set dataRange2 = wsData.Range("E1:E6") ' グラフ作成のサブルーチンを呼び出す Call CreateChart(wsGraph, wsData, dataRange1, dataRange2) End Sub |
6~9行目:シート名やグラフに使用するセルを設定
12行目:グラフ作成ロジックの呼び出し
グラフの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub CreateChart(wsGraph As Worksheet, wsData As Worksheet, dataRange1 As Range, dataRange2 As Range) On Error GoTo ErrorHandler Dim chartObj As ChartObject ' 前回作成したグラフを削除 If wsGraph.ChartObjects.Count > 0 Then wsGraph.ChartObjects.Delete End If ' グラフの作成 Set chartObj = wsGraph.ChartObjects.Add(20, 20, 235, 150) With chartObj.Chart .ChartType = xlColumnClustered .SetSourceData Source:=Union(dataRange1, dataRange2) .HasLegend = False End With Exit Sub ErrorHandler: MsgBox "エラーが発生しました: " & Err.Description End Sub |
2行目:エラーが発生した時は「ErrorHandler」を実行する。
7~9行目:指定したシートに存在するグラフを削除する。
12行目:グラフのサイズを指定
14行目:棒グラフを指定
15行目:参照するデータを指定
21~22行目:「ErrorHandler」の処理としてメッセージを発信。
使用技術
基本技術:ADD
まとめ
今回紹介したVBAコードでは、データ範囲を指定して効率的にグラフを作成する方法を解説しました。既存のグラフを削除してから新しいグラフを生成するため、コードを連続して実行しても前回のグラフが残ることなく、毎回正しく新しいグラフが作成されます。柔軟にデータ範囲やワークシートを指定できるため、複数の場面での応用が可能です。
この手法は、データ分析やレポート作成の作業効率を大幅に向上させるため、定期的なグラフの作成が必要なプロジェクトや報告書の自動化に最適です。エラーハンドリングも組み込まれており、実行中に問題が発生した際にも適切な対応が取れるようになっています。ぜひ、VBAによる自動化の一環としてご活用ください。
コメント