vbaガイド:チャート・グラフ編

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 4月 11, 2022

Excelのチャートやグラフは、データを視覚的に表示するために使用します。このチュートリアルでは、VBAを使って チャートやチャートエレメントを作成、操作する方法について説明します。

ワークシートに埋め込まれたチャートや、独自のチャートシート上にチャートが作成出来るようになります。

VBAによる埋め込みチャートの作成

下図のように、ソースデータを含む範囲A1:B4があります。

The Source Data For the Chart チャート

ChartObjects.Addメソッドでチャートを作成することができます。以下のコードでは、ワークシート上に埋め込みチャートを作成します。

Sub CreateEmbeddedChartUsingChartObject()

Dim embeddedchart As ChartObject

Set embeddedchart = Sheets("Sheet1").ChartObjects.Add(Left:=180, Width:=300, Top:=7, Height:=200)
embeddedchart.Chart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B4")

End Sub

結果は以下のようになります。

Creating a Chart using VBA and the ChartObjects method チャート

Shapes.AddChartメソッドを使用してチャートを作成することもできます。次のコードは、ワークシート上に埋め込みチャートを作成します。

Sub CreateEmbeddedChartUsingShapesAddChart()

Dim embeddedchart As Shape

Set embeddedchart = Sheets("Sheet1").Shapes.AddChart
embeddedchart.Chart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B4")

End Sub

VBAによるグラフの種類の指定

下図のように、ソースデータを含む範囲A1:B5を用意します。

The Source range for Creating a Pie Chart Using VBA パイチャート

グラフの種類は、ChartTypeプロパティで指定できます。次のコードは、ChartTypeプロパティがxlPieに設定されているため、ワークシート上に円グラフを作成します。

Sub SpecifyAChartType()

Dim chrt As ChartObject

Set chrt = Sheets("Sheet1").ChartObjects.Add(Left:=180, Width:=270, Top:=7, Height:=210)
chrt.Chart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B5")
chrt.Chart.ChartType = xlPie

End Sub

結果は以下のようにになります。

Specifying the Chart Type in VBA パイチャート

他にもありますが、通常指定される一般的なチャートの種類を紹介します。

  • xlArea
  • xlPie
  • xlLine
  • xlRadar
  • xlXYScatter
  • xlSurface
  • xlBubble
  • xlBarClustered
  • xlColumnClustered

VBAによるグラフのタイトルの追加

下図のように、ワークシートでチャートを選択しています。

The Active Chart チャート

まず、Chart.SetElementメソッドでチャートタイトルを追加し、ChartTitle.Textプロパティを設定してチャートタイトルのテキストを指定する必要があります。 次のコードは、チャートのタイトルを追加し、アクティブなチャートのタイトルテキストを指定する方法です。

Sub AddingAndSettingAChartTitle()

ActiveChart.SetElement (msoElementChartTitleAboveChart)
    ActiveChart.ChartTitle.Text = "商品の売上"
    
End Sub

結果は以下のようになります。

Chart with title added using VBA チャート タイトル追加

注:ActiveChartオブジェクトをコードで使用する場合、まずチャートを選択し、それをアクティブなチャートにする必要があります。

VBAによるチャートの背景色の変更

下図のように、ワークシートでチャートを選択しています。

Active Chart Changing Background Color チャート 背景色変更

ChartAreaオブジェクトのFillFormatオブジェクトのRGBプロパティを設定することで、チャート全体の背景色を変更することができます。次のコードでは、チャートの背景色を薄いオレンジ色にします。

Sub AddingABackgroundColorToTheChartArea()

ActiveChart.ChartArea.Format.Fill.ForeColor.RGB = RGB(253, 242, 227)

End Sub

結果は以下のようになります。

Changing the Chart Background Color in VBA チャート 背景色変更

また、ChartAreaオブジェクトのInteriorオブジェクトのColorIndexプロパティを設定することで、チャート全体の背景色を変更することができます。次のコードは、チャートの背景色をオレンジ色にするものです。

Sub AddingABackgroundColorToTheChartArea()

ActiveChart.ChartArea.Interior.ColorIndex = 40

End Sub

結果は以下のようになります。

Changing the Chart Background Color in VBA with ColorIndex チャート 背景色変更

注:ColorIndexプロパティは、定義済みパレットの中から、1〜56の値に基づいて色を指定することができます。値と色の対応については、こちらをご覧ください。

VBAによるチャートプロット領域の色の変更

下図のように、ワークシートでチャートを選択しています。

Selected Chart For Changing the Plot Area Color チャート プロットエリア 色変更

PlotAreaオブジェクトのFillFormatオブジェクトのRGBプロパティを設定することで、チャートのプロットエリアだけの背景色を変更することができます。以下のコードでは、チャートのプロットエリアの背景色をライトグリーンにします。

Sub AddingABackgroundColorToThePlotArea()

ActiveChart.PlotArea.Format.Fill.ForeColor.RGB = RGB(208, 254, 202)
    
End Sub

結果は以下のようになります。

Changing the Plot Area color Using VBA チャート プロットエリア 色変更

VBAによる凡例の追加

以下のように、ワークシートでチャートが選択されている状態であるとしましょう。

Selected Chart for Changing the Legend パイチャート

Chart.SetElementメソッドを使えば、凡例を追加することができます。以下のコードでは、チャートの左側に凡例を追加しています。

Sub AddingALegend()

ActiveChart.SetElement (msoElementLegendLeft)

End Sub

結果は以下のようになります。

Adding A Legend to the Chart Using VBA パイチャート 凡例追加

凡例の位置は、以下の方法で指定することができます。

  • msoElementLegendLeft – チャートの左側に凡例を表示します。
  • msoElementLegendLeftOverlay – チャートの左側に凡例を重なるように表示します。
  • msoElementLegendRight – チャートの右側に凡例を表示します。
  • msoElementLegendRightOverlay – チャートの右側に凡例を重なるように表示します。
  • msoElementLegendBottom – チャートの底に凡例を表示します。
  • msoElementLegendTop – チャートの一番上に凡例が表示します。

VBAによるデータラベルの追加

以下のように、ワークシートでチャートを選択しています。

Pie Chart without Labels パイチャート

データラベルを追加するには、Chart.SetElementメソッドを使用します。次のコードは、チャートの内側の端にデータラベルを追加します。

Sub AddingADataLabels()

ActiveChart.SetElement msoElementDataLabelInsideEnd

End Sub

結果は以下のようになります。

Adding data labels to a Pie Chart in VBA パイチャート データラベル

データラベルの配置は、以下の方法で指定できます。

  • msoElementDataLabelShow – データラベルを表示します。
  • msoElementDataLabelRight – データラベルをチャートの右側に表示します。
  • msoElementDataLabelLeft – データラベルをチャートの左側に表示します。
  • msoElementDataLabelTop – データラベルをチャートの一番上に表示します。
  • msoElementDataLabelBestFit – 最も適した位置に調整します。
  • msoElementDataLabelBottom – データラベルをチャートの下部に表示します。
  • msoElementDataLabelCallout – データラベルをコールアウトとして表示します。
  • msoElementDataLabelCenter – データラベルを中央に表示します。
  • msoElementDataLabelInsideBase – データラベルを内側のベースに表示します。
  • msoElementDataLabelOutSideEnd – チャートの外側の端にデータラベルを表示します。
  • msoElementDataLabelInsideEnd – チャートの内側端にデータ ラベルを表示します。

VBAでX軸とタイトルを追加

以下のように、ワークシートでチャートが選択されているとします。

Column Chart

この状態でChart.SetElementメソッドを使うと、X軸とX軸のタイトルを追加することができます。次のコードは、チャートにX軸とX軸のタイトルを追加しす。

Sub AddingAnXAxisandXTitle()

With ActiveChart
.SetElement msoElementPrimaryCategoryAxisShow
.SetElement msoElementPrimaryCategoryAxisTitleHorizontal
End With

End Sub

結果は以下のようになります。

Adding an X-axis and Axis Title Using VBA X軸追加

VBAでY軸とタイトルを追加

以下のように、ワークシートでチャートを選択しています。

Chart for Y-axis and title Y軸追加

Chart.SetElementメソッドを使うと、Y軸とY軸のタイトルを追加することができます。以下のコードでは、チャートにY軸とY軸タイトルを追加しています。

Sub AddingAYAxisandYTitle()

With ActiveChart
.SetElement msoElementPrimaryValueAxisShow
.SetElement msoElementPrimaryValueAxisTitleHorizontal
End With 
End Sub

結果は以下のようになります。

Adding a Y-Axis and Axis Title Using VBA Y軸追加

軸の数値形式の変更

ワークシートで以下のようなグラフが選択されています。

Chart Selected For Changing The Number Format

軸の数値形式を変更することができます。次のコードは、Y 軸の数値形式を通貨に変更します。

Sub ChangingTheNumberFormat()

ActiveChart.Axes(xlValue).TickLabels.NumberFormat = "\$#,##0.00"

End Sub

結果は以下のようになります。

Changing the Number Format of an Axis Using VBA 数値 表示形式 変更

グラフのフォントの書式の変更

ワークシートで以下のようなグラフが選択されている状態です。

Source Chart For Formatting in VBA 書式変更

フォントオブジェクトを参照して、その名前、フォントの太さ、サイズを変更することで、チャート全体のフォントの書式を変更することができます。次のコードは、チャート全体のフォントの種類、太さ、大きさを変更するものです。

Sub ChangingTheFontFormatting()

With ActiveChart

.ChartArea.Format.TextFrame2.TextRange.Font.Name = "Times New Roman"
.ChartArea.Format.TextFrame2.TextRange.Font.Bold=True
.ChartArea.Format.TextFrame2.TextRange.Font.Size=14

End With

End Sub

結果は以下のようになります。

Changing The Format of the Font of the Entire Chart in VBA 書式変更

VBAを使ったグラフの削除

以下のように、ワークシートでチャートを選択しています。

Source Chart For Formatting in VBA 書式変更

このグラフを削除するには、次のコードを使います。

Sub DeletingTheChart()

ActiveChart.Parent.Delete

End Sub

ChartObjects コレクションの参照

ChartObjectsコレクションを参照することで、ワークシートやワークブックに埋め込まれているすべてのチャートにアクセスすることができます。ここでは、同じシートに2つのグラフがある場合を見てみましょう。

Chart Source For Chart Objects 変更前

ここでは、ChartObjectsコレクションを参照して、ワークシート上の両方のグラフに同じ高さ、幅、グリッド線の削除、背景色の統一、グラフのプロットエリアの色、プロットエリアの線の色を同じ色にすることを説明します。

Sub ReferringToAllTheChartsOnASheet()

Dim cht As ChartObject

For Each cht In ActiveSheet.ChartObjects
cht.Height = 144.85
cht.Width = 246.61

cht.Chart.Axes(xlValue).MajorGridlines.Delete
cht.Chart.PlotArea.Format.Fill.ForeColor.RGB = RGB(242, 242, 242)
Cht.Chart.ChartArea.Format.Fill.ForeColor.RGB = RGB(234, 234, 234)
cht.Chart.PlotArea.Format.Line.ForeColor.RGB = RGB(18, 97, 172)

Next cht

End Sub

という結果になります。 VBA ChartObjects Collection 変更後

チャートを専用のシートに挿入

下図のように、ソースデータを含む範囲A1:B6があります。

Source Range For Chart Sheet

Charts.Addメソッドでチャートを作成することができます。次のコードでは、独自のチャートシートにチャートを作成します。

Sub InsertingAChartOnItsOwnChartSheet()

Sheets("Sheet1").Range("A1:B6").Select
Charts.Add

End Sub

結果は以下のようになります。

Adding a Chart to Its Own Chart Sheet Using VBA

他のチャート作成チュートリアルも併せてご覧ください。

エクセルでのチャート

VBAで棒グラフを作成する

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples