在VBA中循环遍历数组

时间:2016-03-29 01:13:41

标签: arrays vba excel-vba loops max

我正在尝试遍历我拥有的数组,首先,我从电子表格数据创建我的数组,该数据从第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 个答案:

答案 0 :(得分:2)

默认情况下,Excel希望在工作表的中放置一维数组,而不是在列中,因此当您尝试放置时,您将获得每个单元格中数组的第一个元素它在一个专栏中。

所有值都为零,因为您的1-d数组是从零开始的,并且您没有在循环中填充该插槽。

您可以使用转置将数组“翻转”到列中:

Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(columns, 1)) = _
     Application.Transpose(Maxindex)