今回はグラフ操作や、グラフの作成、詳細設定の方法をご説明します。
実はグラフには大きく分けて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プロパティ」で指定します。
正直番号を順番に指定してみて、好みの色を指定する方が早いかもしれません。
定数 | 値 | 説明 |
msoNotThemeColor | 0 | テーマの色を指定しません |
msoThemeColorDark1 | 1 | 濃色1 |
msoThemeColorLight1 | 2 | 淡色1 |
msoThemeColorDark2 | 3 | 濃色2 |
msoThemeColorLight2 | 4 | 淡色2 |
msoThemeColorAccent1 | 5 | アクセント1 |
msoThemeColorAccent2 | 6 | アクセント2 |
msoThemeColorAccent3 | 7 | アクセント3 |
msoThemeColorAccent4 | 8 | アクセント4 |
msoThemeColorAccent5 | 9 | アクセント5 |
msoThemeColorAccent6 | 10 | アクセント6 |
msoThemeColorHyperlink | 11 | ハイパーリンク |
msoThemeColorFollowedHyperlink | 12 | クリックされたハイパーリンク |
msoThemeColorText1 | 13 | テキスト1 |
msoThemeColorBackground1 | 14 | 背景1 |
msoThemeColorText2 | 15 | テキスト2 |
msoThemeColorBackground2 | 16 | 背景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 |