何をお探しですか?
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