グラフの作成
以下の表のグラフを作成する。
Dim graphGhart As Object
'グラフを作成
Set graphGhart = ActiveSheet.Shapes.AddChart.Chart
'範囲を指定
graphGhart.SetSourceData Range("A2:C10")
.SetSourceData で指定した一番左の列がX軸となり、それ以外の列がY軸となる。
この記述でグラフの作成はできるのですが(私はこのやり方で作成していました...)、オブジェクトなんか作らずに With ステートメントで記述するのが一般的なようなので、以降は With ステートメントを使って記載していきます。
With ActiveSheet.Shapes.AddChart.Chart
.SetSourceData Range("A2:C10") '範囲
End With

ちなみに、AddChart を AddChart2 とするとグラフの見た目が変わります。見た目の好きな方でOK。パラメータが少し違うのですが、パラメータ名を省略しなければ問題ないと思う。タイトルや系列名の表示/非表示などについても、後述する .HasTitle / .HasLegend で変更できるので気にしなくて大丈夫。
With ActiveSheet.Shapes.AddChart2.Chart
.SetSourceData Range("A2:C10") '範囲
End With

AddChart と AddChart2 のパラメータはこのようになっているようです。参考まで。
expression.AddChart (XlChartType, Left, Top, Width, Height)
expression.AddChart2 (Style, XlChartType, Left, Top, Width, Height, NewLayout)
グラフの種類を指定
ChartType の値を指定する事で、グラフの種類を変更できる。以下の例では折れ線グラフを指定している。With ActiveSheet.Shapes.AddChart.Chart
.SetSourceData Range("A2:C10") '範囲
.ChartType = xlLine 'グラフの種類 (折れ線)
End With
もしくは AddChart のパラメータで指定する事も可能。With ActiveSheet.Shapes.AddChart(XlChartType:=xlLine).Chart
.SetSourceData Range("A2:C10") '範囲
End With
以下に代表的なグラフの種類を示す。他の種類を知りたい人は こちら を参照してください。
設定 | 内容 |
---|---|
xlLine | 折れ線 |
xlLineMarkers | マーカー付き折れ線 |
xlColumnClustered | 縦棒 |
xlLineStacked | [積み上げ] 折れ線 |
xlLineMarkersStacked | [積み上げ] マーカー付き折れ線 |
xlColumnStacked | [積み上げ] 縦棒 |
xlPie | 円 |
xlXYScatter | 散布図 |

グラフの範囲を指定
以下のようにグラフにしたい列が連続していなかった場合は、X軸の範囲とY軸の範囲をカンマ (,) で分けてに指定する。
With ActiveSheet.Shapes.AddChart.Chart
.SetSourceData Range("A2:A10,C2:D10") '範囲 (X軸, Y軸)
End With
グラフの位置とサイズを指定
グラフの表示される位置とサイズを指定するには、AddChart のパラメータで指定できます。LeftとTopが位置で、WidthとHeightがサイズになります。With ActiveSheet.Shapes.AddChart(Left:=200, Top:=0, Width:=300, Height:=200).Chart
.SetSourceData Range("A2:C10") '範囲
End With
以下のようにもできる。好きな方でOK。With ActiveSheet.Shapes.AddChart
.Left = 200 '座標 (横方向)
.Top = 0 ' (縦方向)
.Width = 300 'サイズ (横幅)
.Height = 200 ' (縦幅)
.Chart.SetSourceData Range("A2:C10") '範囲 (.Chart がこっちに移動している点に注意)
End With
系列名と表示位置を指定する
AddChart2 の場合はデフォルトで系列名が非表示なので.HasLegend = True が必要。AddChart なら書かなくても問題ないと思う。With ActiveSheet.Shapes.AddChart.Chart
.SetSourceData Range("A2:C10") '範囲
'系列名の表示/非表示 (True/False)
.HasLegend = True
'系列名を指定
.SeriesCollection(1).Name = "値1" '系列1 (直接指定)
.SeriesCollection(2).Name = Range("C1") '系列2 (セルから取得)
'系列名の表示位置
.Legend.Position = xlLegendPositionBottom '下に表示
End With
表示位置の設定値を以下に示す。
設定 | 内容 |
---|---|
xlLegendPositionBottom | グラフの下 |
xlLegendPositionCorner | グラフの輪郭線の右上隅 |
xlLegendPositionCustom | 任意の位置 |
xlLegendPositionLeft | グラフの左 |
xlLegendPositionRight | グラフの右 |
xlLegendPositionTop | グラフの上 |

タイトルを指定する
グラフのタイトル、X軸/Y軸のタイトルを指定するサンプル。Axes(xlCategory) がX軸を示し、Axes(xlValue) がY軸を示す。
With ActiveSheet.Shapes.AddChart.Chart
.SetSourceData Range("A2:C10") '範囲
'グラフのタイトルを指定
.HasTitle = True '表示/非表示 (True/False)
.ChartTitle.Text = "グラフのタイトル" 'タイトル値
'X軸のタイトルを指定
.Axes(xlCategory).HasTitle = True '表示/非表示 (True/False)
.Axes(xlCategory).AxisTitle.Text = "X軸のタイトル" 'タイトル値
'Y軸のタイトルを指定
.Axes(xlValue).HasTitle = True '表示/非表示 (True/False)
.Axes(xlValue).AxisTitle.Text = "Y軸のタイトル" 'タイトル値
End With

グラフに表示する最大値/最小値を指定する
例として 最大値 90, 最小値 20 に設定してみます。With ActiveSheet.Shapes.AddChart.Chart
.SetSourceData Range("A2:C10") '範囲
'Y軸の最大値を指定
.Axes(xlValue).MaximumScale = 90
'Y軸の最小値を指定
.Axes(xlValue).MinimumScale = 20
End With

目盛の幅を指定する
目盛の幅を指定するサンプル。With ActiveSheet.Shapes.AddChart.Chart
.SetSourceData Range("A2:C10") '範囲
'X軸の目盛幅を指定
.Axes(xlCategory).MajorUnit = 2
'Y軸の目盛幅を指定
.Axes(xlValue).MajorUnit = 10
End With

また、目盛の表示する向きを指定する事もできる。指定する値を 0 にすると水平になります。
'X軸の目盛表示を右へ90度回転
.Axes(xlCategory).TickLabels.Orientation = -90
第2軸の指定
以下のように値に差がある場合、1つのグラフで表示するには第2軸を使うと思います。
AxisGroup で系列毎に主軸か第2軸かを指定することができる。
SeriesCollection(2) は系列2を示す。見やすくするために系列2は折れ線グラフにした。
主軸グループであることを指定したい場合は xlSecondary ではなく xlPrimary となる。
With ActiveSheet.Shapes.AddChart.Chart
.SetSourceData Range("A2:C10") '範囲
'系列2を編集
.SeriesCollection(2).AxisGroup = xlSecondary '第2軸グループに指定
.SeriesCollection(2).ChartType = xlLine '折れ線
End With

2つの表から散布図を作成する
以下のような2つの表から散布図を作成する。
'グラフ種別を散布図 (xlXYScatter) にする
With ActiveSheet.Shapes.AddChart(XlChartType:=xlXYScatter).Chart
'系列1
.SeriesCollection.NewSeries '新しい系列を作成
.SeriesCollection(1).XValues = Range("A2:A10") 'X軸
.SeriesCollection(1).Values = Range("B2:B10") 'Y軸
'系列2
.SeriesCollection.NewSeries '新しい系列を作成
.SeriesCollection(2).XValues = Range("D2:D10") 'X軸
.SeriesCollection(2).Values = Range("E2:E10") 'Y軸
End With

グラフを削除する
アクティブシート内にあるすべてのグラフを削除します。'グラフがあるかチェック
If (ActiveSheet.ChartObjects.Count > 0) Then
ActiveSheet.ChartObjects.Delete '削除
End If
0 件のコメント:
コメントを投稿