Categories: VBA基礎

EXCEL VBA グラフシートにグラフを作成する方法(Charts.Add : SetSourceData) データ範囲を指定してグラフの作成

 

EXCEL VBA グラフシートにグラフを作成する方法(Charts.Add : SetSourceData) データ範囲を指定してグラフの作成

 

 

●はじめに
EXCELで一覧表などを作成して、それをグラフ化すると数値では表現しづらい事でも、ビジュアル的に表現する事ができます。グラフで表現する事で見た目でデータの大小や乖離などが伝わりやすくなります。EXCELでグラフを表現するには、通常使うシートに作成する方法とグラフシートに作成する方法の2パターンがあります。今回は、グラフシートでのグラフを作成する方法を説明いたします。

 

 

●書式の説明 【Charts.Add(Before,After)】
【オブジェクト.SetSourceData(Source,PlotBy)】
【Charts.Add(Before,After)】
例:  Charts.Add before:=Worksheets(“Sheet1”)
※ ワークシート(Sheet1)の横にグラフシートを作成します。【オブジェクト.SetSourceData(Source,PlotBy)】
※ Source ⇒ データ範囲を指定 (グラフ化データの指定)
引数:PlotBy
(データ系列の方向指定)
データ系列を縦方向xlRows
データ系列を横方向xlColumns
例: ActiveChart.SetSourceData Source:=Worksheets(“sheet1”).Range(“A1:D4”), PlotBy:=xlRows

 

 

グラフシートにグラフを作成する方法

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、グラフシートを作成して、そのグラフシートに指定したデータからグラフを作成します。

 

Sub Grafh_sheet01()

    Charts.Add before:=Worksheets("Sheet1") 'グラフシートを作成します。
    ActiveChart.SetSourceData Source:=Worksheets("sheet1").Range("A1:D4"), PlotBy:=xlRows
    'ワークシート「sheet1」のA1:D4からデータ系列縦のデータでグラフを作成します。

End Sub

 

●実行前~実行後 ※プログラム実行後、Sheet1のデータを元にグラフシートにグラフが作成されました。
(画面クリックして拡大)

 

 

 

グラフシートにグラフを作成する方法(既にグラフあれば作成しない)

 

●プログラム説明 (サンプル②)

下記のサンプルプログラムは、グラフが作成を作成するプログラムなのですが、グラフシート(グラフ)が既に作成されている場合は、”既にグラフが作成されています。”とメッセージが表示されプログラムが終了します。グラフシートが作成されていない場合は、シート(月別売上)の表データを元に、グラフを作成します。

 

 

Sub Grafh_sheet02()

    If Charts.Count = 0 Then  'グラフシートがあるか確認するする
                
            With Charts.Add(After:=Sheets("月別売上"))  'グラフシートを作成します。
                    .Name = Worksheets("月別売上").Range("A1")  'シート名をA1を指定します。「月別売上合計表」
                    .SetSourceData Source:=Worksheets("月別売上").Range("A5").CurrentRegion, PlotBy:=xlColumns 'グラフを作成します。
            End With            
        Else
            MsgBox "既にグラフが作成されています。"
    End If
End Sub

 

●実行前~実行後 ※プログラム実行後、1回目の実行は、グラフシート(グラフ)が無いので、グラフシートが作成されグラフを作成されました。2回目の実行は、グラフが作成されているので、「既にグラフが作成されています。」のメッセージが表示されました。
(画面クリックして拡大)

 

 

グラフシートにグラフを作成する方法(データ系列の選択)

 

●プログラム説明 (サンプル③)

下記のサンプルプログラムは、グラフが作成を作成するプログラムなのですが、一度作成したグラフに対してデータ系列を選択できるサンプルプログラムです。グラフ作成後でもデータ系列を縦方向・横方向に変更できるので、作成されたグラフを確認しつつ変更する事ができるサンプルプログラムです。

 

Sub Grafh_sheet03()

    Dim Sen As Integer
    Dim SPotBy As Variant
    
    Sen = Application.InputBox(Prompt:="データ系列の方向を指定します。縦:1・横:2", Title:="グラフシート", Default:="1", Left:=100, Top:=200, Type:=2) 'InputBoxメゾット設定します。
    'データ系列の方向を指定します。
    
    If Sen = 1 Then
            SPotBy = xlRows 'データ系列を縦方向
        Else
            SPotBy = xlColumns  'データ系列を横方向
    End If
    
    
    If Charts.Count = 0 Then  'グラフシートがあるか確認するする 0:はグラフシート無し
    
             With Charts.Add(After:=Sheets("年度売上")) 'グラシートが作成いないので、グラフを作成します。
                .Name = "年度売上グラフ"
                .SetSourceData Source:=Worksheets("年度売上").Range("A1").CurrentRegion, PlotBy:=SPotBy
             End With
      Else
            '既にグラフが作成されている場合は、データ系列の変更を行います。
            Charts("年度売上グラフ").SetSourceData Source:=Worksheets("年度売上").Range("A1").CurrentRegion, PlotBy:=SPotBy
        
    End If
      
End Sub


 

 

●実行前~実行後 ※プログラム実行後、データ系列を指定するInputBoxが表示されますので、データ系列(縦)・(横)を入力します。入力後に指定したデータ系列でグラフが作成されます。2度目以降の実行では、グラウは作成されていまので、データ系列が変更されていれば、そのデータ系列に応じてグラフが修正されます。
(画面クリックして拡大)

 

 

グラフシートの削除方法(グラフシートを全て削除)

 

 

●プログラム説明 (サンプル④)
下記のサンプルプログラムは、作成したグラフシートを削除するプログラムです。削除条件として、1以上のグラフシートが有る場合は、全てのグラフシートを削除します。

 

Sub Grafh_sheet04() 'グラフシートの削除

    Application.DisplayAlerts = False 'グラフシートを削除する際に確認メッセージを無効
    
    If Charts.Count >= 1 Then  'グラフシートが1以上ある場合は削除
            Charts.Delete    'グラフシートを削除します。
    End If

    Application.DisplayAlerts = True  '確認メッセージを有効化にする

End Sub

 

 

●実行前~実行後 ※プログラム実行後、グラフシート「年度売上グラフ」が削除され、「年度売上」のシートのみ残りました。
(画面クリックして拡大)

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA