Excel VBA グラフ(Chart)操作 グラフの作成と詳細設定をする方法

グラフ作成/操作

今回はグラフ操作や、グラフの作成、詳細設定の方法をご説明します。

実はグラフには大きく分けて2種類あります。

埋め込みオブジェクトのグラフ」と、「グラフシートに表示するグラフ」です。

みなさんが普段Excelでシートのデータ範囲を選択して、メニューから種類を選択してシート上に作成しているグラフは「埋め込みオブジェクトのグラフ」になります。

今回はこの「埋め込みオブジェクトのグラフ」についての説明となります。

情報量が多いため、必要な情報を選んでご覧ください。

1.グラフのオブジェクトを理解する

グラフを作成する最もシンプルな方法は、次の「2.グラフの作成方法」をご覧ください。

その前に、グラフのオブジェクトの概念を理解しましょう。

グラフは、グラフを表示するための領域を確保する「ChartObject」オブジェクトがあり、その中に折れ線などのグラフとなる「Chart」オブジェクトがあります。

さらにグラフを表示する範囲を指定する「ShapeRange」オブジェクトがあります。

イメージにすると次のようになります。

それぞれどのオブジェクトを操作すると、どの部分を操作できるかがイメージできるかと思います。

左は階層図、右は平面図?です。

2.グラフの作成方法

Excelのシート上にグラフを作成する基本的な方法は次のように記載します。

上記の図の様にシートを指定して、「Shapes.AddChart」で表示領域を作成し、その中にChartオブジェクトのグラフの種類などを指定します。

Sub Sample1()

With ActiveSheet.Shapes.AddChart.Chart

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

End With

End Sub

「ChartType 」でグラフの種類を指定します。

「SetSourceData」でデータの範囲を指定します。

グラフの表示領域のみ作成する場合は次のように記述します。

Sub Sample2()

ActiveSheet.Shapes.AddChart

End Sub

3.グラフの詳細設定

グラフの細かい設定をします。

ChartObject」、「Chart」のどちらを操作しているか注視してください。

※タイトルや凡例などはさら細かいオブジェクトの操作になります。

「ChartObjects(1)」は「ChartObjects(“グラフ 1”)」の様に名前で指定もできます。

名前で指定出来るので、面倒ですが作成時にしっかりグラフ名を指定すると、後々のVBA操作が楽になります。

表示位置

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

セルで位置を指定する
Sub Sample3()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

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

End Sub
座標で位置を指定する

Top/Leftプロパティに数値を指定する事でそれぞれ「x」「y」座標で指定する事ができます。

Sub Sample4()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Top = 100
    .Left = 20
    
End With

End Sub

大きさ

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

セルで指定する
Sub Sample5()

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 Sample6()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj

    .Width = 500
    .Height = 300
    
End With

End Sub

グラフの名前

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

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

Sub Sample7()

Dim ChartObj    As Object

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

With ChartObj

    .Name = "Chart1"
    
End With

End Sub

タイトル

タイトルを指定する

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

※新しく「 ChartTitle」オブジェクトが出てきました。

Sub Sample8()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj.Chart

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

End Sub
タイトルのサイズと色を指定する

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

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

Sub Sample9()

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
色一覧

グラフの色を指定する場合は「ObjectThemeColorプロパティ」で指定します。

正直番号を順番に指定してみて、好みの色を指定する方が早いかもしれません。

定数説明
msoNotThemeColor0テーマの色を指定しません
msoThemeColorDark11濃色1
msoThemeColorLight12淡色1
msoThemeColorDark23濃色2
msoThemeColorLight24淡色2
msoThemeColorAccent15アクセント1
msoThemeColorAccent26アクセント2
msoThemeColorAccent37アクセント3
msoThemeColorAccent48アクセント4
msoThemeColorAccent59アクセント5
msoThemeColorAccent610アクセント6
msoThemeColorHyperlink11ハイパーリンク
msoThemeColorFollowedHyperlink12クリックされたハイパーリンク
msoThemeColorText113テキスト1
msoThemeColorBackground114背景1
msoThemeColorText215テキスト2
msoThemeColorBackground216背景2

系列名を変更する

Chart」オブジェクトの「SeriesCollection(1).XValues」で「””」も文字として扱うため、「””””」として文字列を指定します。

Sub Sample10()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj.Chart

    .SeriesCollection(1).XValues = _
    "={""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9"",""10"",""11"",""12""}"
    
End With

End Sub

項目名を変更する

Chart」オブジェクトの「SeriesCollection(1).Name」で「””」も文字として扱うため、「””””」として文字列を指定します。

Sub Sample11()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj.Chart
    
    .SeriesCollection(1).Name = "=""A店"""
    .SeriesCollection(2).Name = "=""B店"""
    .SeriesCollection(3).Name = "=""C店"""
    .SeriesCollection(4).Name = "=""D店"""
    
End With

End Sub

凡例

凡例を表示する

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

Sub Sample12()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj.Chart
    
    .HasLegend = True'表示する
    .Legend.Position = xlLegendPositionBottom'表示位置
    
End With
表示位置一覧
定数説明
xlLegendPositionBottomグラフの下
xlLegendPositionCornerグラフの輪郭線の右上隅
xlLegendPositionCustom任意の位置
xlLegendPositionLeftグラフの左
xlLegendPositionRightグラフの右
xlLegendPositionTopグラフの上
凡例の色を指定する

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

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

Sub Sample13()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj.Chart.Legend.Format.Fill
    
    .Visible = msoTrue
    .ForeColor.RGB = RGB(255, 0, 0)
    
End With

End Sub

数値(最大/最小)

数値の最大/最小を手動で設定する

グラフのX軸の数値を手動で設定する場合に、「Chart」オブジェクトの「MaximumScaleプロパティ」と「MinimumScaleプロパティ」で最大と最小を指定します。

Sub Sample14()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj.Chart
    
    .Axes(xlValue).MinimumScale = 150
    .Axes(xlValue).MaximumScale = 300
    
End With

End Sub
数値の最大/最小を自動で設定する

Chart」オブジェクトの最小値の自動は「MinimumScaleIsAuto」プロパティで指定し、最大値の自動は「MaximumScaleIsAuto」プロパティで指定します。

True/Falseで設定します。

Sub Sample15()

Dim ChartObj    As Object

Set ChartObj = ActiveSheet.ChartObjects(1)

With ChartObj.Chart
    
    .Axes(xlValue).MinimumScaleIsAuto = 150
    .Axes(xlValue).MaximumScaleIsAuto = 300
    
End With

End Sub

4.グラフの種類

実はグラフの種類は細かく分けるとものすごく多いです。

Excel2007~2013では73種類くらいあります。

なので、個人的によく使われる種類を赤くしています。

種類グラフの種類定数
縦棒集合縦棒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
折れ線折れ線xlLine
折れ線データマーカー付き折れ線xlLineMarkers
折れ線積み上げ折れ線xlLineStacked
折れ線データマーカー付き積み上げ折れ線 xlLineMarkersStacked
折れ線100%積み上げ折れ線xlLineStacked100
折れ線データマーカー付き100%積み上げ折れ線xlLIneMarkersStacked100
折れ線3-D折れ線xl3DLine
xlPie
分割円xlPieExploded
3-D円xl3Dpie
分割3-D円xl3DPieExploded
補助円グラフ付き円xlPieOfPie
補助縦棒グラフ付き円xlBarOfPie
散布図散布図xlXYScatter
散布図平滑線付き散布図xlXYScatterSmooth
散布図平滑線付き散布図データマーカーなしxlXYScatterSmoothNoMarkers
散布図折れ線付き散布図xlXYScatterLines
散布図折れ付き散布図データマーカーなしxlXYScatterLinesNoMarkers
バブルバブルxlBubble
バブル3-D効果付きバブルxlBubble3DEffect
xlArea
3-D面xl3DArea
積み上げ面xlAreaStacked
3-D積み上げ面xl3DAreaStacked
100%積み上げ面xlAreaStacked100
3-D100%積み上げ面xl3DAreaStacked100
ドーナツドーナツxlDoughnutExploded
ドーナツ分割ドーナツxlRadar
レーダーレーダーxlRadar
レーダーデータマーカー付きレーダーxlRadarMarkers
レーダー塗りつぶしレーダーxlRadarFilled
等高線3-D等高線xlSurface
等高線等高線トップビューxlSurfaceTopView
等高線3-D等高線ワイヤフレームxlSurfaceWireframe
等高線等高線トップビュー-ワイヤフレームxlSurfaceTopViewWireframe
株価高値-安値-終値xlStockHLC
株価出来高-高値-安値-終値xlStockVHLC
株価始値-高値-安値-終値xlStockOHLC
株価出来高-始値-高値-安値-終値xlStockVOHLC
円柱集合円柱縦棒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
タイトルとURLをコピーしました