我正在尝试遍历我拥有的数组,首先,我从电子表格数据创建我的数组,该数据从第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
答案 0 :(得分:2)
默认情况下,Excel希望在工作表的行中放置一维数组,而不是在列中,因此当您尝试放置时,您将获得每个单元格中数组的第一个元素它在一个专栏中。
所有值都为零,因为您的1-d数组是从零开始的,并且您没有在循环中填充该插槽。
您可以使用转置将数组“翻转”到列中:
Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(columns, 1)) = _
Application.Transpose(Maxindex)