VBA入門講座の記事です。今回は Shapes コレクションのAddChartメソッドを使って、シートにグラフを挿入する方法について解説します。
AddChartでシートにグラフを挿入する
三次関数 y=x 3 のグラフを表示するマクロを作成します。x, y データの作成からグラフの表示まで、全てオートマティックに実行させます。
'[VBA]データの作成とグラフの挿入
Sub Create_Chart()
Dim myrange As Range
Dim i As Double
i = -3
Range("A1") = "x"
Range("B1") = "y"
Range("A2").Select
'A列とB列にデータを作成
Do While i <= 3.1
ActiveCell.Value = i
ActiveCell.Offset(, 1).Value = i ^ 3
ActiveCell.Offset(1).Select
i = i + 0.2
Loop
'セル A2 を Range型変数 myrange に格納
Set myrange = Range("A2").CurrentRegion
'グラフの追加(種類は平滑線)
'左から100,上から100,幅200,高さ300
With ActiveSheet.Shapes _
.AddChart(xlXYScatterSmoothNoMarkers, 100, 100, 200, 300).Chart
'グラフデータとしてmyrangeを選択
.SetSourceData myrange
'グラフタイトルの設定
.ChartTitle.Text = "y=x^3"
'凡例は非表示
.HasLegend = False
'グラフの色は赤
.FullSeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 0, 0)
'プロットエリアを枠線で囲む
.PlotArea.Border.LineStyle = xlContinuous
'x軸の設定(最小値-2,最大値2,目盛交差)
With .Axes(xlCategory)
.MinimumScale = -2
.MaximumScale = 2
.MajorTickMark = xlTickMarkCross
End With
'y軸の設定(目盛り線なし,最小値-6,最大値6,目盛交差)
With .Axes(xlValue)
.HasMajorGridlines = False
.MinimumScale = -6
.MaximumScale = 6
.MajorTickMark = xlTickMarkCross
End With
End With
End Sub
Create_Chart() を実行すると、次のようなグラフが表示されるはずです。
Create_Chart の構造について簡単に解説しておきます。最初に x, y のデータを作成するために Do While … Loop ステートメントを使っています。-3 から 3 まで 0.2 刻みで x の値をセルに出力していますが、
Do While i <= 3.1
というように、その上限を 3.1 にしてあります。10 進数 0.2 を 2 進数に変換すると丸め誤差が生じてしまうため、上限を 3 にしてしまうと 2.8 までしか出力されません。このように上手く 2 進数変換されない刻み幅でループさせるときは step 数より少ない数を上限に加えて調整します。
このマクロの核となる部分は Excel2007 から追加された Shapesコレクションの AddChart メソッドです。
オブジェクト.AddChart(type, Left, Top, Width, Height)
type にはグラフの種類を指定します。今は平滑線を描きたいので「 xlXYScatterSmoothNoMarkers 」を指定しています。他によく使用されるグラフの種類としては次のようなものがあります。
xlColumnClustered:集合縦棒 xlLine:折れ線 xlPie:円グラフ xlXYScatter:散布図
Left, Top, Width, Height はそれぞれ下の図にあるような長さを指定します。
以降の記述はグラフの色や凡例表示の有無、軸の設定など細々とした調整ですので、コメント文を参考にしながら自分で色々といじってみてください。
エクセルや数学に関するコメントをお寄せください