EXCEL は散布図を描く際によく用いています.散布図のデータ系列の指定は奥深く,非常に難しいものがあり,少し凝ったことをしようとすると大変な目に遭います.
手動では設定不可能なほどの数のデータ系列の設定を VBA から行えないか,試行錯誤しました.今回はマクロの記録にとどめます.
散布図を挿入する
散布図の種類
散布図には以下の種類があります.
- 散布図
- 散布図(平滑線とマーカー)
- 散布図(平滑線)
- 散布図(直線とマーカー)
- 散布図(直線)
- バブル
- 3D 効果つきバブル
マクロ記録
それらのマクロ記録は次のようになります.
1
2
3
4
5
6
7
|
ActiveSheet.Shapes.AddChart2(240, xlXYScatter).Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLines).Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
ActiveSheet.Shapes.AddChart2(269, xlBubble).Select
ActiveSheet.Shapes.AddChart2(269, xlBubble3DEffect).Select
|

データ系列の追加
散布図に最初のデータ系列を追加する
フラフのプロットエリアを右クリックして「データの選択」を選ぶとデータソースの選択ダイアログが現れます.「追加」ボタンを押すと「系列の編集」ダイアログに遷移し,ここで実際のデータ領域を指定します.
1
2
3
4
5
6
7
8
|
ActiveSheet.ChartObjects("グラフ 1").Activate
Application.CutCopyMode = False
Application.CutCopyMode = False
Application.CutCopyMode = False
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).Name = "=DATA!$F$2"
ActiveChart.FullSeriesCollection(1).XValues = "=DATA!$J$2:$J$5"
ActiveChart.FullSeriesCollection(1).Values = "=DATA!$G$2:$G$5"
|

二番目のデータ系列を追加する
同様にプロットエリアを右クリックして「データの選択」から「追加」で新しいデータ系列を設定します.
1
2
3
4
5
6
7
|
Application.CutCopyMode = False
Application.CutCopyMode = False
Application.CutCopyMode = False
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(2).Name = "=DATA!$F$6"
ActiveChart.FullSeriesCollection(2).XValues = "=DATA!$J$6:$J$9"
ActiveChart.FullSeriesCollection(2).Values = "=DATA!$G$6:$G$9"
|

グラフエリア,プロットエリアの書式設定
「グラフのデザイン」タブで「グラフスタイル」を指定する箇所がありますが,なぜかブルーバックの白ポイントが選択肢に出てこなかったので,手動で設定したマクロ記録を載せます.
散布図の初期状態はあまり見栄えがいいとは言えません.「グラフエリアの書式設定」で「塗りつぶし」を「単色」の「青」,「枠線」を「線なし」とし,「プロットエリアの書式設定」で「塗りつぶし」を「なし」,「枠線」を「単色」の「白」としたところです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
ActiveSheet.ChartObjects("グラフ 1").Activate
With ActiveSheet.Shapes("グラフ 1").Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Solid
End With
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.PlotArea.Select
ActiveSheet.Shapes("グラフ 1").Line.Visible = msoFalse
Selection.Format.Fill.Visible = msoFalse
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
End With
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
End With
|


データ系列の書式設定
データ系列の総数は最終的に数百にもなります.そのため,色を替えていては追いつきません.ここでは全てのデータ系列の色を白に揃えます.
操作していて気がついたのですが,データ系列の書式設定の際,複数のデータ系列を同時に選択することはできないようです.一つずつ地道に選択しては操作を繰り返す必要があります.
「データ系列の書式設定」で変更するのは「マーカーのオプション」「塗りつぶし」「枠線」です.
「マーカーのオプション」では「組み込み」でサイズを 1 に変更します.
「塗りつぶし」は「塗りつぶし(単色)」で「色」は「白」に変更します.
「枠線」は「線なし」に変更します.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
ActiveChart.FullSeriesCollection(1).Select
With Selection
.MarkerStyle = 8
.MarkerSize = 5
End With
Selection.MarkerSize = 4
Selection.MarkerSize = 3
Selection.MarkerSize = 2
Selection.MarkerSize = 1
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Solid
End With
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
.Solid
End With
Selection.Format.Line.Visible = msoFalse
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
ActiveChart.FullSeriesCollection(2).Select
With Selection
.MarkerStyle = 8
.MarkerSize = 5
End With
Selection.MarkerSize = 4
Selection.MarkerSize = 3
Selection.MarkerSize = 2
Selection.MarkerSize = 1
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Solid
End With
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
.Solid
End With
Selection.Format.Line.Visible = msoFalse
|
ついでにグラフのサイズも変更します.
1
2
3
4
5
|
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("グラフ 1").ScaleWidth 1.0666666667, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.Shapes("グラフ 1").ScaleHeight 1.7222222222, msoFalse, _
msoScaleFromTopLeft
|

軸の書式設定
X 軸の書式設定
X 軸の書式設定で変更するのは「軸のオプション」の「最小値」と「最大値」,「縦軸との交点」の「軸の値」,「表示形式」の「カテゴリ」です.
「軸のオプション」の「最小値」は -0.2, 「最大値」は 0.2 と入力します.
「縦軸との交点」の「軸の値」は「軸のオプション」の「最小値」に入力したのと同じ値を入力します.
「表示形式」の「カテゴリ」は「パーセンテージ」を選択します.
1
2
3
4
5
6
7
|
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MinimumScale = -0.2
ActiveChart.Axes(xlCategory).MaximumScale = 0.2
ActiveChart.Axes(xlCategory).CrossesAt = 0
ActiveChart.Axes(xlCategory).CrossesAt = -0.2
Selection.TickLabels.NumberFormatLocal = "0%"
|
Y 軸の書式設定
Y 軸の書式設定で変更するのは「対数目盛を表示する」,「境界値」の「最小値」と「最大値」,「表示単位」です.
まず「対数目盛を表示する」にチェックを入れます.
次に「境界値」の「最小値」と「最大値」にそれぞれ 100, 1.0E7 と入力します.「自動」のままにしておくとデータ系列の分布によってはレイアウトが切り替わるため,不都合です.
さらに「表示単位」を「万」に変更します.
1
2
3
4
5
6
|
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlValue).ScaleType = xlLogarithmic
ActiveChart.Axes(xlValue).MinimumScale = 100
ActiveChart.Axes(xlValue).MaximumScale = 1000000
ActiveChart.Axes(xlValue).MaximumScale = 10000000
ActiveChart.Axes().DisplayUnit = xlThousands
|
補助目盛線の追加とフォントの色の変更
Y 軸に補助目盛線を追加します.また,各軸のフォントの色,表示単位ラベルのフォントの色を全て白に変更します.
1 |
ActiveChart.Axes(xlValue).HasMinorGridlines = True
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
With Selection.Format.TextFrame2.TextRange.Font
.BaselineOffset = 0
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
End With
ActiveChart.Axes(xlCategory).Select
With Selection.Format.TextFrame2.TextRange.Font
.BaselineOffset = 0
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
End With
ActiveChart.Axes(xlValue).DisplayUnitLabel.Select
With Selection.Format.TextFrame2.TextRange.Font
.BaselineOffset = 0
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
End With
|

まとめ
EXCEL の散布図で複数のデータ系列を追加していく過程をマクロ記録しました.また,グラフの書式設定を変更していく過程もマクロ記録しました.
散布図のデータ系列は FullSeriesCollection() コレクションに格納され,インデックス番号で管理されていることが分かりました.インデックス番号を変数化してループすれば自動で複数のデータ系列を追加できそうなめどが立ちました.