Excel VBA 棒グラフ(Chart)を作成する

グラフ作成/操作

今回は棒グラフを作成する方法をご説明します。

棒グラフを作成する基本的な方法から、詳細設定まで併せてご説明します。

その他のグラフ作成や、グラフの詳細設定は次の記事をご覧ください。

一番最後に簡単なグラフのサンプルコードを載せています

1.棒グラフを作成する

もっともシンプルに棒グラフを作成する方法は次のように記述します。

棒グラフを作成するには「Chart」オブジェクトの「ChartType」を「xlColumnClustered」と指定します。

また、「SetSourceData」でデータ範囲を指定しています。

Sub Sample1()

With ActiveSheet.Shapes.AddChart.Chart

    .ChartType = xlColumnClustered
    .SetSourceData Range(Cells(1, 1), Cells(13, 5))

End With

End Sub

2.棒グラフの種類

棒グラフの種類は縦棒横棒で大きく分けられ、それぞれいくつかあります。

縦棒グラフ一覧

グラフの種類定数
集合縦棒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

3.グラフの詳細設定する

作成したグラフを指定するには「ChartObject(番号)」もしくは、「 ChartObject(“グラフ名”) 」

で指定する事ができます。

表示位置

上記で作成したグラフの表示位置を指定します。

グラフの位置を設定するには、「ChartObject」のTopプロパティLeftプロパティで設定します。

セルか座標で表示位置を指定できます。

セルで指定

Sub Sample2()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Top = Range("C2").Top
    .Left = Range("C2").Left
    
End With

End Sub

x,y座標で指定

Sub Sample3()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Top = 100
    .Left = 20
    
End With

End Sub

大きさを指定する

グラフの大きさを設定するには、「ChartObject」のWidthプロパティHeightプロパティで設定します。

セル範囲と数値で指定することができます。

セルで指定する
Sub Sample4()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Width = Range("G2:L13").Width
    .Height = Range("G2:L13").Height
    
End With

End Sub
数値で大きさを指定する
Sub Sample5()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Width = 500
    .Height = 300
    
End With

End Sub

グラフの名前

グラフの名前を設定するには、「ChartObject」のNameプロパティで設定します。

「グラフ 1」を「Chart1」へ変更します。

Sub Sample6()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects("グラフ 1")

With ChartObj

    .Name = "Chart1"
    
End With

End Sub

タイトルを指定する

グラフのタイトルを指定するには、「Chart」オブジェクトのHasTitleプロパティでタイトルを表示し、「 ChartTitle」オブジェクトのTextプロパティでタイトル名を指定します。

.ChartObjects.Chart.ChartTitle.Format.TextFrame2.TextRange.Font」でタイトルのサイズやフォントサイズ、色を指定する場合は次の様に記述します。

次のコードは、「with ChartObjects.Chart」の中に、入れ子で「ChartTitle.Format.TextFrame2.TextRange.Font」と指定しているため分かれています。

タイトルの色は「グラフ操作 グラフの作成と詳細設定をする方法」の「色一覧」をご覧ください。

Sub Sample7()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj.Chart

    .HasTitle = True
    .ChartTitle.Text = "年間売上グラフ"

  With .ChartTitle.Format.TextFrame2.TextRange.Font
    
        .Size = 10
        .Fill.ForeColor.ObjectThemeColor = 6 'msoThemeColorAccent2でもOK
        
    End With
    
End With

End Sub

凡例を操作する

凡例は「Chart」オブジェクトの「Chart.HasLegend 」をTrue/Falseで表示を指定して、「Chart.Legend.Position」プロパティで表示位置を指定します。

凡例の色は「ChartObjects.Chart.Legend.Format.Fill」の「.Visible = msoTrue」で凡例を塗りつぶす指定をします。

.ForeColor.RGB」で色を指定します。

凡例の表示位置は「グラフ操作 グラフの作成と詳細設定をする方法」の「表示位置一覧」をご覧ください。

Sub Sample8()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj.Chart
    
    .HasLegend = True '表示する
    .Legend.Position = xlLegendPositionBottom '表示位置

    With ChartObj.Chart.Legend.Format.Fill
    
        .Visible = msoTrue '塗りつぶし設定
        .ForeColor.RGB = RGB(255, 0, 0) '色指定
    
    End With
    
End With

End Sub

4.棒グラフサンプルコード

棒グラフの何種類か詳細設定も含めたサンプルコード紹介です。

データは「1.棒グラフを作成する」で使用したデータを使います。

各オブジェクトをWithで入れ子にしているのがポイントになります。

シンプルな棒グラフ

縦棒グラフ
Sub Sample9()

Dim ChartObj    As Object

With ActiveSheet.Shapes.AddChart.Chart

    .ChartType = xlColumnClustered
    .SetSourceData Range(Cells(1, 1), Cells(13, 5))
    
End With

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Name = "Chart1" 'グラフの名前を設定
    .Top = 10 '表示位置
    .Left = 300 '表示位置
    .Width = 600 '幅
    .Height = 250 '高さ
    
    With .Chart
        
        .HasTitle = True 'タイトル設定
        .ChartTitle.Text = "年間売上グラフ" 'タイトル文字列
        
        With .ChartTitle.Format.TextFrame2.TextRange.Font
        
            .Size = 10 'タイトル文字サイズ
            .Fill.ForeColor.ObjectThemeColor = 6 'タイトル文字色
            
        End With
        
        .HasLegend = True '凡例表示
        .Legend.Position = xlLegendPositionRight '凡例表示位置(右側)
    
        With ChartObj.Chart.Legend.Format.Fill
        
            .Visible = msoTrue '塗りつぶし設定
            .ForeColor.RGB = RGB(217, 217, 217) '色指定
        
        End With
        
    End With

End With

End Sub
横棒グラフ
Sub Sample10()

Dim ChartObj    As Object

With ActiveSheet.Shapes.AddChart.Chart

    .ChartType = xlBarClustered
    .SetSourceData Range(Cells(1, 1), Cells(13, 5))
    
End With

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Name = "Chart1" 'グラフの名前を設定
    .Top = 10 '表示位置
    .Left = 300 '表示位置
    .Width = 600 '幅
    .Height = 250 '高さ
    
    With .Chart
        
        .HasTitle = True 'タイトル設定
        .ChartTitle.Text = "年間売上グラフ" 'タイトル文字列
        
        With .ChartTitle.Format.TextFrame2.TextRange.Font
        
            .Size = 10 'タイトル文字サイズ
            .Fill.ForeColor.ObjectThemeColor = 6 'タイトル文字色
            
        End With
        
        .HasLegend = True '凡例表示
        .Legend.Position = xlLegendPositionRight '凡例表示位置(右側)
    
        With ChartObj.Chart.Legend.Format.Fill
        
            .Visible = msoTrue '塗りつぶし設定
            .ForeColor.RGB = RGB(217, 217, 217) '色指定
        
        End With
        
    End With

End With

End Sub

3-D積み上げ縦棒グラフ

Sub Sample11()

Dim ChartObj    As Object

With ActiveSheet.Shapes.AddChart.Chart

    .ChartType = xl3DcolumnStacked
    .SetSourceData Range(Cells(1, 1), Cells(13, 5))
    
End With

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Name = "Chart1" 'グラフの名前を設定
    .Top = 10 '表示位置
    .Left = 300 '表示位置
    .Width = 600 '幅
    .Height = 250 '高さ
    
    With .Chart
        
        .HasTitle = True 'タイトル設定
        .ChartTitle.Text = "年間売上グラフ" 'タイトル文字列
        
        With .ChartTitle.Format.TextFrame2.TextRange.Font
        
            .Size = 10 'タイトル文字サイズ
            .Fill.ForeColor.ObjectThemeColor = 6 'タイトル文字色
            
        End With
        
        .HasLegend = True '凡例表示
        .Legend.Position = xlLegendPositionRight '凡例表示位置(右側)
    
        With ChartObj.Chart.Legend.Format.Fill
        
            .Visible = msoTrue '塗りつぶし設定
            .ForeColor.RGB = RGB(217, 217, 217) '色指定
        
        End With
        
    End With

End With

End Sub

3-D100%積み上げ横棒

Sub Sample12()

Dim ChartObj    As Object

With ActiveSheet.Shapes.AddChart.Chart

    .ChartType = xl3DBarStacked100
    .SetSourceData Range(Cells(1, 1), Cells(13, 5))
    
End With

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Name = "Chart1" 'グラフの名前を設定
    .Top = 10 '表示位置
    .Left = 300 '表示位置
    .Width = 600 '幅
    .Height = 250 '高さ
    
    With .Chart
        
        .HasTitle = True 'タイトル設定
        .ChartTitle.Text = "年間売上グラフ" 'タイトル文字列
        
        With .ChartTitle.Format.TextFrame2.TextRange.Font
        
            .Size = 10 'タイトル文字サイズ
            .Fill.ForeColor.ObjectThemeColor = 6 'タイトル文字色
            
        End With
        
        .HasLegend = True '凡例表示
        .Legend.Position = xlLegendPositionRight '凡例表示位置(右側)
    
        With ChartObj.Chart.Legend.Format.Fill
        
            .Visible = msoTrue '塗りつぶし設定
            .ForeColor.RGB = RGB(217, 217, 217) '色指定
        
        End With
        
    End With

End With

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