0
私が持っている配列をループしようとしています。まず、行2、列2(約1000行×100列)で始まるスプレッドシートデータから配列を作成します。配列を定義した後、各列を別々のデータセットとして扱い、最大値と最大値の行番号を見つけ、別々の配列に格納します。このコードを実行すると、0の値の列が返されます。それはどんなエラーも出さないが、それは明らかに動作していない、任意の提案ですか?デフォルトではVBAで配列をループする
Public Maxindex() As Long
Public MaxVal() As Double
Sub ArrayOptimized()
'Uses arrays to call data from the sheet once then process it
Dim dataset() As Variant
Dim rows As Long
Dim columns As Integer
ReDim Maxindex(100)
ReDim MaxVal(100)
MaxVal(1) = 1
rows = ShData.Cells(ShData.rows.Count, 1).End(xlUp).Row
columns = ShData.Cells(1, ShData.columns.Count).End(xlToLeft).Column
ReDim dataset(2 To rows, 2 To columns)
dataset = ShData.Range(ShData.Cells(2, 2), ShData.Cells(rows, columns))
'Check to sheet
Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(rows, columns)) = dataset
For i = LBound(dataset, 2) To UBound(dataset, 2)
For j = LBound(dataset, 1) To UBound(dataset, 1)
If dataset(j, i) > MaxVal(i) Then
MaxVal(i) = dataset(j, i)
'Returns row index number in array for max val
Maxindex(i) = j
End If
Next j
Next i
Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(columns, 1)) = Maxindex
End Sub
私は答えを書いていたが、ティムがそれに私を打ちます。インデックス1に値を入力し始めただけで、ゼロから始まる最大値の配列の最初の要素が得られます。データセットのラバウンド。さらに、 'ReDim dataset(2 To rows、2 To Columns)'は何もしません。次の行では、暗黙的なデフォルト値でデータセットに値を割り当てるからです。 – Jeeped
私もそれを打ち負かす - 私は 'ReDim Maxindex(1 To columns)'と 'ReDim MaxVal(1 To columns)'を固定値の代わりに使うことも考えています。 – Comintern
@Jeepedしたがって、値を割り当てる前に配列サイズをsepcifyする必要はありませんか? – Duranchula