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