【发布时间】:2016-03-29 01:13:41
【问题描述】:
我正在尝试遍历我拥有的数组,首先我从电子表格数据创建数组,该数据从第 2 行第 2 列开始(大约 1000 行 x 100 列)。定义我的数组后,我想将每一列视为一个单独的数据集,找到最大值和最大值的行号,然后将每个列存储在单独的数组中。当我运行此代码时,它返回一列 0 值。它没有给出任何错误,但显然不起作用,有什么建议吗?
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)什么也不做,因为在下一行中,您将值(默认情况下)分配给数据集。 -
是的。也打败我 - 我也会考虑
ReDim Maxindex(1 To columns)和ReDim MaxVal(1 To columns)而不是固定值。 -
@Jeeped 所以我不需要在赋值之前指定数组大小?
-
不,当您从单元格中分配值时,您正在将其重新调整为二维数组。关于一维数组:您可以使用
redim Maxindex(LBound(dataset, 2) To UBound(dataset, 2)),然后您不必调整i以将其用作maxindex 的索引。例如Maxindex(i) = j而不是Maxindex(i - 1) = j;你可以使用redim Maxindex(LBound(dataset, 2) To UBound(dataset, 2), 1 to 1),然后你就不必转置它了。 -
@jeeped Waht 在“redim Maxindex(LBound(dataset, 2) To UBound(dataset, 2), 1 to 1)”中的“1 to 1”做什么?
标签: arrays vba excel loops max