何をお探しですか?
ExcelのVBを使用したグラフの作成
Excelを使用すると、データをグラフィカルに表示でき、データの更新も簡単に行えます。このセクションのグラフはすべて、x軸の一定の増分に対してyの値をプロットしただけの折れ線グラフです。
Excelでのグラフ作成は、ワークシートにデータを挿入し、範囲を指定し、グラフを追加するだけです。Excelの範囲については、Excelのドキュメントを参照してください。範囲は配列を扱う上で重要です。このセクションでは、Excelの範囲で1つのセルにまたは複数のセルからなるグループに名前を付けます。これにより、セルのグループを変数とすることができます。範囲の名前を使用することにより、新しいデータをグラフに追加することができます。このセクションではデータが追加される範囲の定義を修正する方法を説明します。
使用するワークシートに数値を挿入するには、CellsオブジェクトまたはRangeオブジェクトが使用できます。以下の式のいずれによっても、数値3が同じE3セルに挿入されます。
Cells(3, 5) = 3
Cells(3, 5).Value = 3
Range("E3").Value = 3
Range("E2").Offset(1, 0) = 3
Offsetを使用し、E2からE3にセルを移動することができます。CellsとOffsetでの小括弧内の引数は(行, 列)です。
配列
Rangeオブジェクトを使用して、1次元の配列をワークシートへ行として挿入します。以下の例では、1次元の配列にデータを挿入します。データを挿入するために、左上のセルから右下のセルまで指定して範囲を作成します。右下のセルを作成するために、左上のセルを基準としたOffsetを使用することができます。行オフセットをゼロとすると、UpperLeftセルと同じ行となります。列はデータ・ポイント数から1を引いた値に設定されます。
範囲を設定し、データと同じ値にします。ActiveCell.Addressは"A1"のような文字列を返します。このコードは、データの1次元の配列を作成し、アクティブ・セルの左上のセルから挿入します。以下のコードではデータの行を作成します。
Dim data() As Double
Dim i As Long
Dim rng As Range
Dim UpperLeftCell As String
Dim numbPoints As Long
UpperLeftCell = ActiveCell.Address
numbPoints = 20
ReDim data(numbPoints - 1)
For i = 0 To numbPoints - 1
data(i) = i + 1
Next i
Set rng = Range(Range(UpperLeftCell), Range(UpperLeftCell).Offset(0, numbPoints _
- 1))
rng.Value = data
列にデータを挿入するには、2次元配列が必要です。下記に、データ列のルーチンを示します。宣言および示されていない内容は、上記と同じです。
ReDim data(numbPoints - 1, 0)
For i = 0 To numbPoints - 1
data(i, 0) = i + 1
Next i
Set rng = Range(Range(UpperLeftCell), Range(UpperLeftCell).Offset(numbPoints - 1,_
0))
rng.Value = data
単純なグラフ
ワークシートへ配列を配置する方法を説明したので、グラフの作成方法に移ります。Excelコマンドの最適な学習方法の1つはマクロの記録機能を使用することです。ワークシートのA1~A20のセルを選択します。メニューでTools > Macro > Record New Macroを選択して、マクロの記録機能をオンにします。グラフ・ウィザードを使用して、データから折れ線グラフを作成します。Alt+F8を押し、リストからマクロを選択して、マクロを表示します。Editをクリックします。
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:A20")
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
汎用的にするために、グラフのソースを文字列ではなく変数に変更します。ワークシードでデータのRangeを使用します。これにより、グラフ・データをコードで変更できます。下記のコードでは、式の右側のRange(upperLeftCell)は左上のセルを、Range(upperLeftCell).Offset(numbPoints, 0)は右下のセルを表わしています。
Set dataRange = Range(Range(upperLeftCell), Range(upperLeftCell)._
Offset(numbPoints, 0))
ActiveChart.SetSourceData Source:= dataRange, PlotBy:=xlColumns
この方法でグラフのソースを設定すると、ポイント数を変えてグラフを作成でき、より汎用的なプログラムとなります。このコードを使用すると、データのサイズや場所に関係なくグラフが作成できます。
upperLeftCell = "A1"
numbPoints = 50
' put the data on the active sheet (one column)
Set dataRange = Range(Range(upperLeftCell), Range(upperLeftCell)._
Offset(numbPoints-1, 0))
dataRange.Value = data
SheetName = ActiveSheet.Name
Charts.Add
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "My Chart"
.ChartType = xlLineMarkers
.SetSourceData Source:=DataRange, PlotBy:=xlColumns
.Location Where:=xlLocationAsObject, Name:=SheetName
End With