Stations()
以下のコードを使用すると、ワークシートからすべての一意のステーション名を取得して、文字列配列に入れることができます。
Dim TopRowOfData As Integer
Dim StationNameColumn As Integer
Dim Stations() As String
Sub GetUniqueChartNames()
Dim rngTmp As Range
Dim outRange As Range
'Select the first data cell of the Station name column.
Cells(TopRowOfData, StationNameColumn).Select
'Select the rest of the data in the column.
Range(Selection, Selection.End(xlDown)).Select
'Assign this data to a range variable.
Set rngTmp = Selection
'Find a row that occurs below the area of the range data. This will be used
'to paste the filtered values into temporarily.
outRow = rngTmp.Row + rngTmp.Rows.Count + 10 '10 is arbitrary, could be any number.
Set outRange = Cells(outRow, 1)
'Filter the data values by unique values and paste the results into the outRange area.
rngTmp.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=outRange, Unique:=True
'Get the output results of the filter operation and store them in a range object.
'outRow contains the heading of the filtered column. outRow + 1 is where the data starts.
Cells(outRow + 1, 1).Select
Range(Selection, Selection.End(xlDown)).Select
Dim rngFinal As Range
Set rngFinal = Selection
'Add the output results into the Stations array.
ReDim Stations(rngFinal.Rows.Count - 1)
Dim i As Integer
For i = 0 To rngFinal.Rows.Count - 1
Stations(i) = Cells(rngFinal.Row + i, rngFinal.Column).Value
Next
'Delete the temporary range.
rngFinal.Clear
End Sub
変数はまさにそれTopRowOfData
であり、データが始まる一番上の行が何であるかをコードに伝える整数です。 StationNameColumn
ステーション名(A = 1、B = 2など)を含む列の番号です。
ステーション名の配列を取得したら、ステーション名の列をステップダウンして、配列内の各アイテムに関連付けられているすべてのデータ値を取得できます。次に、そのデータに基づいて個々のグラフを作成します。
または、ステーション名列の値をステップ実行して、現在のステーション名に関連付けられている最初と最後の行のアドレスを取得し、そのデータに基づいてグラフを作成することもできます。以下のコードは、すべての同一のステーション名がグループ化されるようにデータがステーション名で並べ替えられていると仮定して、これを実行します。
Sub FindRowsAssociatedWithStationName()
Dim i As Integer
Dim j As Integer
Dim rng As Range
'Temp variables to store the first and last row numbers.
Dim first As Integer
Dim last As Integer
'Loop through all of the station names.
For i = 0 To UBound(Stations)
'Select the first data cell of the station names column.
Cells(TopRowOfData, StationNameColumn).Select
'Select the rest of the data in the column.
Range(Selection, Selection.End(xlDown)).Select
'Assign this data to a range variable.
Set rng = Selection
'Initialize both of the row number variables to 0.
first = 0
last = 0
'Loop through all the data rows.
For j = 0 To rng.Rows.Count - 1
If Cells(rng.Row + j, StationNameColumn).Value = Stations(i) Then
'Set the first variable.
If first = 0 Then
first = rng.Row + j
End If
'Set the last variable.
last = rng.Row + j
End If
Next
'Call a method to create the actual charts, passing in the first and last row associated with the current Station name.
Call CreateChart(first, last)
Next
End Sub
実際のグラフを作成するコードは、最初と最後(行)の値を使用して、それらの行に適切なデータを取得できます。