エクセルでグラフを作る際に、まず面倒くさいのはデータの選択ではないでしょうか?
もちろん、CtrlやShiftボタンを使えばそれなりに効率的にデータ範囲を選択できますが、グラフが変なところに表示されたり、色々面倒くさい感じがします。どうせグラフの見た目も整えるのであれば、データ選択もマクロでやってしまった方が早いですよね。
どのようにすれば効率的でしょうか?
私が色々試行錯誤した方法について何回かに分けてご紹介します。
ネット上にいい感じの情報が見つからない
まず、データ選択のマクロについてネット上に良い情報が落ちているだろうと思って、散々探したのですが、結局見つかりませんでした。もちろん、参考になる情報はあるのですが、自分がやりたいことが見つからないんですね。
例えば、
A3ーA17にデータがある場合にマクロでグラフを作る方法は、、、 みたいな情報は役に立たないですよね?俺は今このセルにあるデータを選択して、グラフにしたいんだよ、別の場所にあるやつも同じように選択したいんだよ!ってなりませんか?
最初の一歩
まずは一番ありそうなパターンのデータを見てみます。下図のようなパターンはよくあるでしょう。
1列目がX軸、2列目以降にY軸が並んでいるパターンです。

このようなパターンであれば、手作業でグラフを作ることもそれほど面倒ではありません。X軸の一番上のデータ0.1を選択し、CtrlボタンとShiftボタンを押したまま↓、→と押せばデータ全体が選択され、挿入で散布図のグラフを挿入すればグラフが作成できます。
この操作は実はそのままマクロで実現できます。
マクロによるデータ選択
上記の操作を実現する実現するマクロは以下の通りです。
まず、X軸のデータの上0.1のところを選択して、以下のマクロを実行すればグラフが作成できます。1列目にX軸、2列目以降にY軸が並んでいるデータがあれば実行できるので、自分のデータで実行してみてください。
Sub DataSelect1()
Dim graph As Chart
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Set graph = ActiveSheet.Shapes.AddChart.Chart
With graph
.ChartType = xlXYScatterLinesNoMarkers
.SetSourceData Range(Selection.Address)
End With
End Sub
Range(Selection, Selection.End(xlDown)).Select
が理解できればだいたい分かるかな、と思います。
Range().selectという表記がRange()を選択するという意味です。
()の中身がSelection, Selection.End(xlDown)になっていますが、これは今選択しているセル(Selection)から今選択しているセルから下方向終端(Selection.End(xlDown))いう意味です。
つまり、現在選択しているセルから下方向終端までを選択するという意味で、ちょうど手作業でCtrl+Shift+↓とするのと同じです。
あとは分かるのではないでしょうか。次の行はEnd(xlToRight)までなので、右終端まで選択します。この状態でグラフを作成すれば、作りたいグラフができるわけです。
グラフの見た目まで整える
このグラフ作成時に、見た目まで整えることができれば便利でしょう。それっぽい見た目を作るマクロは別記事で扱っていますが、そこの要素を今回のマクロにも加えてみましょう。
Sub DataSelect2()
Dim graph As Chart
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Set graph = ActiveSheet.Shapes.AddChart.Chart
With graph
.ChartType = xlXYScatterLinesNoMarkers
.SetSourceData Range(Selection.Address)
'グラフタイトルを消す
.HasTitle = False
'枠線を黒く
.PlotArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
'凡例を消す
.HasLegend = False
'X軸
With .Axes(xlCategory)
'軸の色
.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
'軸ラベルの有無
.HasTitle = True
.AxisTitle.Text = "X-axis"
'軸ラベルの書式
.AxisTitle.Font.Size = 14
.AxisTitle.Font.Name = "Arial"
'目盛り内向き
.MajorTickMark = xlInside
'グリッド線を消す
.MajorGridlines.Format.Line.Visible = msoFalse
'目盛りの書式
.TickLabels.Font.Name = "Arial"
.TickLabels.Font.Size = 10
End With
'Y軸
With .Axes(xlValue)
.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
.HasTitle = True
.AxisTitle.Text = "Y-axis"
.AxisTitle.Font.Size = 14
.AxisTitle.Font.Name = "Arial"
.MajorTickMark = xlInside
.MajorGridlines.Format.Line.Visible = msoFalse
.TickLabels.Font.Name = "Arial"
.TickLabels.Font.Size = 10
End With
End With
End Sub
ちょっと長くなってしまいましたが、内容としては大したことはやっていません。
下図のようなグラフが得られればOKです。X軸やY軸のラベルは.AxisTitle.Text=””の中身を変えれば変えられます。

こんな簡単に選択できるデータばかりではないよね?
とはいえ、今回のデータ選択は手作業でやっても大した作業ではないですし、実際に扱いたいデータは色々な並び方してますよね?次回以降は想定されるデータの並び方とそれに対する対処法を考えていきます。




コメント