VBAでグラフを自動作成!サンプルアプリのご紹介

2023年11月26日

今回は、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

VBAExcel,VBA,グラフ,マクロ

Posted by CoderM