例文を使って繰り返し業務を時短

【マクロ・VBA】グラフを作成する

エクセル、マクロ、VBAでグラフを作成する方法 VBA

棒グラフ

指定した範囲内のデータを使用して、新しいシートに縦棒グラフを作成する

  • hisWorkbook.Worksheets("Sheet1").Range("A1:B5")でSheet1のA1:B5の範囲をグラフの範囲として設定しています。
  • グラフの種類はxlColumnClusteredを指定して縦棒グラフに設定しています。
  • グラフタイトルは、chartTitle変数に設定した文字列を使用して設定しています。
  • 最後に、グラフのオブジェクトをchartObject変数に割り当て、グラフを作成しています。
Sub CreateBarChart()
    Dim chartTitle As String
    chartTitle = "縦棒グラフ" 'グラフタイトルを設定
    
    Dim chartSheet As Worksheet
    Set chartSheet = Worksheets.Add 'グラフを作成するシートを作成
    
    Dim chartRange As Range
    Set chartRange = ThisWorkbook.Worksheets("Sheet1").Range("A1:B5") 'グラフの範囲を指定
    '※上記の例ではSheet1のA1:B5がグラフの範囲
    
    Dim chartObject As ChartObject
    Set chartObject = chartSheet.ChartObjects.Add(0, 0, 500, 400) 'グラフを追加
    
    With chartObject.Chart
        .SetSourceData chartRange 'グラフの範囲を設定
        .ChartType = xlColumnClustered '縦棒グラフに設定
        .HasTitle = True 'グラフタイトルを表示
        .ChartTitle.Text = chartTitle 'グラフタイトルを設定
    End With
End Sub

作成例 別パターン

Sub 縦棒グラフの作成()
  
  With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart
    
    .ChartType = xlColumnClustered
    .SetSourceData Range("A2").CurrentRegion
   
    .HasTitle = True
    .ChartTitle.Text = "タイトル"

  End With

MsgBox "完了"
End Sub

*行列を入れ替える場合

'行列入れ替え
Select Case .PlotBy
Case xlRows
.PlotBy = xlColumns
Case xlColumns
.PlotBy = xlRows
End Select

横棒グラフの作成

Sub 横棒グラフの作成()
  
  With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart
    
    .ChartType = xlBarClustered
    .SetSourceData Range("A2").CurrentRegion
   
    .HasTitle = True
    .ChartTitle.Text = "タイトル"

  End With
MsgBox "完了"
End Sub

積み上げグラフの作成

Sub 積み上げグラフの作成()
  
  With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart
    
    .ChartType = xlColumnStacked
    .SetSourceData Range("A2").CurrentRegion
   
    .HasTitle = True
    .ChartTitle.Text = "タイトル"

  End With

MsgBox "完了"
End Sub

グラフの作成

Sub グラフの作成()
    With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart
       
        .ChartType = xlColumnClustered
        .SetSourceData Source:=Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp))
        .HasTitle = True
        .ChartTitle.Text = "売上一覧"
       
       '行列入れ替え
            Select Case .PlotBy
            Case xlRows
                .PlotBy = xlColumns
            Case xlColumns
                .PlotBy = xlRows
        End Select
    End With
    
    ActiveSheet.ChartObjects(1).Chart.HasLegend = True

    ActiveSheet.ChartObjects(1).Chart.Legend.Position = xlLegendPositionBottom
       
    ActiveSheet.ChartObjects(1).Chart.HasDataTable = True

MsgBox "完了"
End Sub

解説

  • 新しく埋め込みグラフを作成する:ChartObjects.Add(左位置, 上位置, 幅, 高さ)
  • グラフの種類:集合縦棒⇒ActiveSheet.ChartType = xlColumnClustered
    xlLine:折れ線/xlPie:円/xlDoughnut:ドーナツ
    xlArea:面/xlXYScatter:散布図/xlRadar:レーダー
  • ActiveSheet.SetSourceData Source:=Range(Range(“A1”), Cells(Rows.Count, 1).End(xlUp))
    ⇒データ範囲を指定する
  • タイトルを表示する:ActiveSheet.HasTitle = True
  • タイトルの文字を指定する:ActiveSheet.ChartTitle.Text = “タイトル名”
  • 軸の最小値・最大値変更:ActiveSheet.Axes(xlValue).MaximumScale = 100
                ActiveSheet.Axes(xlValue).MinimumScale = 0
  •  グラフの凡例を表示:ActiveSheet.ChartObjects(1).Chart.HasLegend = True
  • グラフの凡例の位置を設定:ActiveSheet.ChartObjects(1).Chart.Legend.Position =
                 xlLegendPositionBottom (下)
  • グラフのデータテーブルを表示:ActiveSheet.ChartObjects(1).Chart.HasDataTable = True

グラフ作成_2軸

Sub グラフ作成_2軸()

With ActiveSheet.Shapes.AddChart
    .Top = 10 'グラフのトップ位置
    .Left = 200 'グラフの左の位置
    .Width = 400 'グラフ幅
    .Height = 200 'グラフの高さ
    .Name = "Chart1" 'グラフの名前
    
    With .Chart
            .ChartType = xlColumnClustered '棒グラフを指定
            .SetSourceData Range(Cells(1, 1), Cells(13, 2)) 'データ範囲を指定
            .SeriesCollection.NewSeries '新しい系列追加
        
                With .SeriesCollection(2) '新しい系列は2番目となる
                        .ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
                        .Values = Range("C2:C13") 'データ範囲を指定
                        .Name = Range("C1") '項目名を指定
                        .AxisGroup = xlSecondary '2軸を設定を指定
                End With
        
                .HasTitle = True 'タイトル設定
                .ChartTitle.Text = "年間売上/受注件数グラフ" 'タイトル文字列
        
                With .ChartTitle.Format.TextFrame2.TextRange.Font
                       .Size = 10 'タイトル文字サイズ
                       .Fill.ForeColor.ObjectThemeColor = 6 'タイトル文字色
                End With
        
                .HasLegend = True '凡例表示
                .Legend.Position = xlLegendPositionRight '凡例表示位置(右側)
    
                With .Legend.Format.Fill
                      .Visible = msoTrue '塗りつぶし設定
                      .ForeColor.RGB = RGB(217, 217, 217) '色指定
                End With
    
    End With
    
End With

MsgBox "完了"
End Sub

グラフの削除

Sub グラフの削除()
    ActiveSheet.ChartObjects("グラフ 1").Delete
End Sub

グラフの作成

Private Sub グラフの作成()
    With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart  'Left/Top/Width/Height
       
        .ChartType = xlColumnClustered          'グラフの種類:集合縦棒
        
        'xlLine:折れ線/xlPie:円/xlDoughnut:ドーナツ/xlArea:面/xlXYScatter:散布図/xlRadar:レーダー
        .SetSourceData Source:=Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp))  'データ範囲を指定する
        .HasTitle = True                    'タイトルを表示する
        .ChartTitle.Text = "売上一覧"       'タイトルの文字を指定する
       
       
    '軸の最小値・最大値変更
    '.Axes(xlValue).MaximumScale = 100
    '.Axes(xlValue).MinimumScale = 0
       
       '行列入れ替え
            Select Case .PlotBy
            Case xlRows
                .PlotBy = xlColumns
            Case xlColumns
                .PlotBy = xlRows
        End Select
    End With
    
    ' グラフの凡例を表示 ’http://excel.style-mods.net/tips_vba/tips_vba_6_08.htm
    ActiveSheet.ChartObjects(1).Chart.HasLegend = True

    ' グラフの凡例の位置を設定
    ActiveSheet.ChartObjects(1).Chart.Legend.Position = xlLegendPositionBottom  'xlLegendPositionTop
       
    
    ' グラフのデータテーブルを表示 http://excel.style-mods.net/tips_vba/tips_vba_6_09.htm
ActiveSheet.ChartObjects(1).Chart.HasDataTable = True


MsgBox "完了"
End Sub

グラフの作成2

Sub test()  
    
    Dim co As ChartObject
    Dim graphRange As Range
    
    ' グラフを追加して
    Set co = ActiveSheet.ChartObjects.Add(500, 25, 500, 300)

    ' グラフの範囲を設定する
    Set graphRange = ActiveSheet.Range(Range("A3"), Cells(Rows.Count, 4).End(xlUp))
    
    ' グラフの種別を設定して(折れ線グラフ)
    co.Chart.ChartType = xlLineMarkers
    
    ' データの範囲を設定する
    co.Chart.SetSourceData Source:=graphRange
Dim i As Long
    With ActiveSheet.ChartObjects(1).Chart

        For i = 1 To .SeriesCollection.Count
            .SeriesCollection(i).HasDataLabels = True
            .SeriesCollection(i).DataLabels.ShowValue = True
            .SetElement msoElementDataLabelTop
        Next i
    End With
MsgBox "完了"
End Sub

グラフの作成3

Sub Sample5()

'新しいグラフを作成
With ActiveSheet.Shapes.AddChart

    .Top = 10 'グラフのトップ位置
    .Left = 200 'グラフの左の位置
    .Width = 400 'グラフ幅
    .Height = 200 'グラフの高さ
    .Name = "Chart1" 'グラフの名前

    With .Chart

        .ChartType = xlColumnClustered '棒グラフを指定
        .SetSourceData Range(Cells(1, 1), Cells(13, 2)) 'データ範囲を指定
        
        .SeriesCollection.NewSeries '新しい系列追加
        
        With .SeriesCollection(2) '新しい系列は2番目となる
            
            .ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
            
            .Values = Range("C2:C13") 'データ範囲を指定
            
            .Name = Range("C1") '項目名を指定
            
            .AxisGroup = xlSecondary '2軸を設定を指定
            
        End With
        
        .HasTitle = True 'タイトル設定
        .ChartTitle.Text = "年間売上/受注件数グラフ" 'タイトル文字列
        
        With .ChartTitle.Format.TextFrame2.TextRange.Font
        
            .Size = 10 'タイトル文字サイズ
            .Fill.ForeColor.ObjectThemeColor = 6 'タイトル文字色
            
        End With
        
        .HasLegend = True '凡例表示
        .Legend.Position = xlLegendPositionRight '凡例表示位置(右側)
    
        With .Legend.Format.Fill
        
            .Visible = msoTrue '塗りつぶし設定
            .ForeColor.RGB = RGB(217, 217, 217) '色指定
        
        End With
        
    End With

End With

MsgBox "完了"
End Sub

ダミーデータのダウンロード

コメント

タイトルとURLをコピーしました