VBAでグラフを自動作成!サンプルアプリのご紹介
今回は、VBAでグラフを作成するサンプルアプリをご紹介します。
VBA(Visual Basic for Applications)を使用してグラフを作成することにはいくつかの利点があります。まず第一に、VBAはMicrosoft Office製品の一部であり、日常利用しているExcelでデータの視覚化や分析がワンクリックできるようになります。また、VBAを使用することで、複雑なタスクや繰り返し作業を自動化し、業務効率を向上させることができます。今回のサンプルアプリでは、3Dグラフと2Dグラフを作成するコードを提供しますが、これによりユーザーは手動でグラフを作成する手間を省くことができます。
サンプルアプリの紹介
シート上に設けた「グラフを作成」ボタンをクリックすると、3D棒グラフと2D棒グラフが作成されます。また、「グラフを削除」ボタンをクリックすると、作成したグラフを削除できます。
サンプルアプリの処理内容
以下が、3Dグラフと2Dグラフを作成、削除するためのサンプルアプリの処理内容の概要です。
1. 変数の厳密な宣言:
コード冒頭でOption Explicitを使用し、未宣言の変数を許可しないように設定しています。これにより、タイプミスや変数の未宣言を防ぎ、コードの品質を向上させます。
2. 3Dグラフの作成:
・ChartObjects.Addメソッドを使用して、指定された位置とサイズで新しい3Dグラフを作成します。
・Chart.SetSourceDataメソッドを使用して、グラフのデータソースを指定します。
・3D柱グラフに設定し、回転角度と奥行きを調整します。
・グラフにタイトルを追加し、フォントサイズを設定します。
3. 2Dグラフの作成:
・Shapes.AddChart2メソッドを使用して、指定された位置とサイズで新しい2Dグラフを作成します。
・2Dグラフのデータソースを指定します。
・グラフにタイトルを追加し、フォントサイズを設定します。
・グラフに凡例を追加します。
4. グラフの削除:
グラフの名前が「成績(3Dグラフ)」または「成績(2Dグラフ)」の場合に、以下のコードを使ってグラフ削除処理を実行します。
gr.Delete
具体的なコードの内容については、次項のサンプルコードをご覧ください。
サンプルコード アプリの作成手順はこちら
以下に示すコードを使用することで、Excel上で直感的かつ迅速にグラフを作成し、分析を進めることができます。 VBAの力を借りて、日常的な作業を効率化しましょう。
'VBAコードで変数を宣言する際、未宣言の変数を許可しないオプションを設定。
'これにより、タイプミスや変数の未宣言を防ぎ、コードの品質を向上させます。
Option Explicit
'これより3Dグラフの作成を開始
Sub グラフを作成()
'変数myRangeを宣言し、その型をRangeに設定
Dim myRange As Range
'変数myRangeにワークシート上の"B17:G30"のセル範囲をセット
'以下で3Dグラフのデータ範囲として使用
Set myRange = Range("B17:G30")
'ChartObjects.Addメソッドを使用して、指定された位置とサイズで新しい3Dグラフを作成。
'With文を使ってこれに対する処理をまとめています。
With ActiveSheet.ChartObjects.Add( _
myRange.Left, myRange.Top, myRange.Width, myRange.Height)
'作成した3Dグラフに名前を付与
.Name = "成績(3Dグラフ)"
'3Dグラフのデータソースを"C4:F14"に設定
.Chart.SetSourceData Range("C4:F14")
'グラフの種類を3D柱グラフに設定
.Chart.ChartType = xl3DColumn
'グラフを回転させる角度を15度に設定
.Chart.Rotation = 15
'グラフの奥行きを40度に設定
.Chart.Elevation = 40
'Withブロックの終了
End With
'作成した3Dグラフに対する追加の処理を行うため、再びWith文を使用
With ActiveSheet.ChartObjects("成績(3Dグラフ)").Chart
'3Dグラフにタイトルを追加し、そのフォントサイズを設定
.HasTitle = True
.ChartTitle.Text = "成績3Dグラフ"
.ChartTitle.Font.Size = 16
'Withブロックの終了
End With
'以下同様の手順で2Dグラフを作成
'変数myRangeにワークシート上の"B17:G30"のセル範囲をセット
Set myRange = Range("i4:N14")
'ChartObjects.Addメソッドを使用して、指定された位置とサイズで新しい2Dグラフを作成。
'With文を使ってこれに対する処理をまとめています。
With ActiveSheet.Shapes.AddChart2 _
(Style:=-1, XlChartType:=xlColumnStacked, Left:=myRange.Left, _
Top:=myRange.Top, Width:=myRange.Width, Height:=myRange.Height)
'作成した2Dグラフに名前を付与
.Name = "成績(2Dグラフ)"
'2Dグラフのデータソースを"C4:F14"に設定
.Chart.SetSourceData Range("C4:F14")
'Withブロックの終了
End With
'2Dグラフにタイトルを追加し、そのフォントサイズを設定
With ActiveSheet.ChartObjects("成績(2Dグラフ)").Chart
.HasTitle = True
.ChartTitle.Text = "成績2Dグラフ"
.ChartTitle.Font.Size = 16
End With
'2Dグラフに凡例を追加
With ActiveSheet.ChartObjects("成績(2Dグラフ)").Chart
.HasLegend = True
.Legend.Position = xlLegendPositionRight
End With
End Sub
'グラフを削除するためのサブルーチン
Sub グラフを削除()
'wsとgrという2つの変数を宣言
'wsはワークシートを、grはグラフオブジェクトを指定
Dim ws As Worksheet
Dim gr As ChartObject
'変数wsにワークシート"Sheet1"をセット
Set ws = Worksheets("Sheet1")
'wsワークシート上のすべてのグラフオブジェクトに対してループを実行
For Each gr In ws.ChartObjects
'グラフの名前が「成績(3Dグラフ)」または「成績(2Dグラフ)」の場合にグラフ削除処理を実行
If gr.Name = "成績(3Dグラフ)" Or gr.Name = "成績(2Dグラフ)" Then
'グラフを削除
gr.Delete
'If文終了
End If
'次のグラフに進みます。
Next gr
'サブルーチン終了
End Sub
グラフの種類の指定方法
上記コードでグラフの種類を3D柱グラフに設定している箇所(下記箇所)がありますが、
イコールの右側「xl3DColumn」の箇所に下記表で示した定数を設定することにより、グラフの種類を変更することができます。例えば「xl3DColumn」を「xlLine」にすると、折れ線グラフに変更できます。
’グラフの種類を3D柱グラフに設定
Chart.ChartType = xl3DColumn
グラフの種類の確認は以下のサイトをご覧ください。
グラフの種類の確認はこちらのサイトをご覧ください
グラフの種類定数一覧 (ChartTypeプロパティ表)
種類 | グラフの種類 | 定数 |
折れ線グラフ | 折れ線 | xlLine |
折れ線グラフ | データマーカー付き折れ線 | xlLineMarkers |
折れ線グラフ | 積み上げ折れ線 | xlLineStacked |
折れ線グラフ | データマーカー付き積み上げ折れ線 | xlLineMarkersStacked |
折れ線グラフ | 100%積み上げ折れ線 | xlLineStacked100 |
折れ線グラフ | データマーカー付き100%積み上げ折れ線 | xlLIneMarkersStacked100 |
折れ線グラフ | 3-D折れ線 | xl3DLine |
縦棒グラフ | 集合縦棒 | xlColumnClustered |
縦棒グラフ | 3-D集合縦棒 | xl3DcolumnClustered |
縦棒グラフ | 積み上げ縦棒 | xlColumnStacked |
縦棒グラフ | 3-D積み上げ縦棒 | xl3DcolumnStacked |
縦棒グラフ | 100%積み上げ縦棒 | xlColumnStacked100 |
縦棒グラフ | 3-D100%積み上げ縦棒 | xl3DcolumnStacked100 |
縦棒グラフ | 3-D縦棒 | xl3Dcolumn |
横棒グラフ | 集合横棒 | xlBarClustered |
横棒グラフ | 3-D集合横棒 | xl3DBarClustered |
横棒グラフ | 積み上げ横棒 | xlBarStacked |
横棒グラフ | 3-D積み上げ横棒 | xl3DBarStacked |
横棒グラフ | 100%積み上げ横棒 | xlBarStacked100 |
横棒グラフ | 3-D100%積み上げ横棒 | xl3DBarStacked100 |
円グラフ | 円 | xlPie |
円グラフ | 分割円 | xlPieExploded |
円グラフ | 3-D円 | xl3Dpie |
円グラフ | 分割3-D円 | xl3DPieExploded |
円グラフ | 補助円グラフ付き円 | xlPieOfPie |
円グラフ | 補助縦棒グラフ付き円 | xlBarOfPie |
ドーナツグラフ | ドーナツ | xlDoughnutExploded |
ドーナツグラフ | 分割ドーナツ | xlRadar |
面グラフ | 面 | xlArea |
面グラフ | 3-D面 | xl3DArea |
面グラフ | 積み上げ面 | xlAreaStacked |
面グラフ | 3-D積み上げ面 | xl3DAreaStacked |
面グラフ | 100%積み上げ面 | xlAreaStacked100 |
面グラフ | 3-D100%積み上げ面 | xl3DAreaStacked100 |
散布図(XY) | 散布図 | xlXYScatter |
散布図(XY) | 平滑線付き散布図 | xlXYScatterSmooth |
散布図(XY) | 平滑線付き散布図データマーカーなし | xlXYScatterSmoothNoMarkers |
散布図(XY) | 折れ線付き散布図 | xlXYScatterLines |
散布図(XY) | 折れ付き散布図データマーカーなし | xlXYScatterLinesNoMarkers |
円柱グラフ | 集合円柱縦棒 | xlCylinderColClustered |
円柱グラフ | 集合円柱横棒 | xlCylinderBarClustered |
円柱グラフ | 積み上げ円柱縦棒 | xlCylinderColStacked |
円柱グラフ | 積み上げ円柱横棒 | xlCylinderBarStacked |
円柱グラフ | 100%積み上げ円柱縦棒 | xlCylinderColStacked100 |
円柱グラフ | 100%積み上げ円柱横棒 | xlCylinderBarStacked100 |
円柱グラフ | 3-D円柱縦棒 | xlCylinderCol |
円錐グラフ | 集合円錐縦棒 | xlConeColClustered |
円錐グラフ | 集合円錐横棒 | xlConeBarClustered |
円錐グラフ | 積み上げ円錐縦棒 | xlConeColStacked |
円錐グラフ | 積み上げ円錐横棒 | xlConeBarStacked |
円錐グラフ | 100%積み上げ円錐縦棒 | xlConeColStacked100 |
円錐グラフ | 100%積み上げ円錐横棒 | xlConeBarStacked100 |
円錐グラフ | 3-D円錐縦棒 | xlConeCol |
ピラミッド | 集合ピラミッド縦棒 | xlPyramidColClustered |
ピラミッド | 集合ピラミッド横棒 | xlPyramidBarClustered |
ピラミッド | 積み上げピラミッド縦棒 | xlPyramidColStacked |
ピラミッド | 積み上げピラミッド横棒 | xlPyramidBarStacked |
ピラミッド | 100%積み上げピラミッド縦棒 | xlPyramidColStacked100 |
ピラミッド | 100%積み上げピラミッド横棒 | xlPyramidBarStacked100 |
ピラミッド | 3-Dピラミッド縦棒 | xlPyramidCol |
レーダーチャート | レーダー | xlRadar |
レーダーチャート | データマーカー付きレーダー | xlRadarMarkers |
レーダーチャート | 塗りつぶしレーダー | xlRadarFilled |
バブルチャート | バブル | xlBubble |
バブルチャート | 3-D効果付きバブル | xlBubble3DEffect |
等高線グラフ | 3-D等高線 | xlSurface |
等高線グラフ | 等高線トップビュー | xlSurfaceTopView |
等高線グラフ | 3-D等高線ワイヤフレーム | xlSurfaceWireframe |
等高線グラフ | 等高線トップビュー-ワイヤフレーム | xlSurfaceTopViewWireframe |
株価チャート | 高値-安値-終値 | xlStockHLC |
株価チャート | 出来高-高値-安値-終値 | xlStockVHLC |
株価チャート | 始値-高値-安値-終値 | xlStockOHLC |
株価チャート | 出来高-始値-高値-安値-終値 | xlStockVOHLC |
ディスカッション
コメント一覧
まだ、コメントがありません