Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays VBA中的数组循环_Arrays_Vba_Excel_Loops_Max - Fatal编程技术网

Arrays VBA中的数组循环

Arrays VBA中的数组循环,arrays,vba,excel,loops,max,Arrays,Vba,Excel,Loops,Max,我试图循环使用我拥有的一个数组,首先我从第2行第2列(大约1000行x 100列)开始的电子表格数据创建数组。定义数组后,我希望将每一列视为一个单独的数据集,找到最大值和最大值的行号,然后将每一列存储在单独的数组中。当我运行此代码时,它返回一列0值。它没有给出任何错误,但显然不起作用,有什么建议吗 Public Maxindex() As Long Public MaxVal() As Double Sub ArrayOptimized() 'Uses arrays to call data

我试图循环使用我拥有的一个数组,首先我从第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

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

所有值都是零,因为您的一维数组是基于零的,并且您没有在循环中填充该插槽

可以使用转置将数组“翻转”为列:

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

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

所有值都是零,因为您的一维数组是基于零的,并且您没有在循环中填充该插槽

可以使用转置将数组“翻转”为列:

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

我正在写答案,但蒂姆抢先给了我。您将获得最大值的零基数组的第一个元素,因为您只开始在索引1处提供值;数据集的lbound。此外,
ReDim数据集(2对行,2对列)
没有任何作用,因为在下一行中,您将值(默认情况下)指定给dataset.Yep。把它也打给我——我会考虑<代码> ReDim Maxindex(1到列)和<代码> ReDim MaxVal(1到列)< /C>,而不是固定值。@ JeppEd,所以在分配值之前,我不需要对数组大小进行区分。不,当你从单元格中分配值时,你就把它重新排列成二维数组。关于一维数组:您可以使用
redimmaxindex(LBound(dataset,2)到UBound(dataset,2))
,这样您就不必调整
i
将其用作Maxindex的索引。e、 g.
Maxindex(i)=j
而不是
Maxindex(i-1)=j
;您可以使用
redim-Maxindex(LBound(dataset,2)到UBound(dataset,2),1到1)
这样您就不必转置它了。@jeeped在“redim-Maxindex(LBound(dataset,2)到UBound(dataset,2),1到1”中“1到1”是怎么做的?我正在写答案,但蒂姆抢先给了我。您将获得最大值的零基数组的第一个元素,因为您只开始在索引1处提供值;数据集的lbound。此外,
ReDim数据集(2对行,2对列)
没有任何作用,因为在下一行中,您将值(默认情况下)指定给dataset.Yep。把它也打给我——我会考虑<代码> ReDim Maxindex(1到列)和<代码> ReDim MaxVal(1到列)< /C>,而不是固定值。@ JeppEd,所以在分配值之前,我不需要对数组大小进行区分。不,当你从单元格中分配值时,你就把它重新排列成二维数组。关于一维数组:您可以使用
redimmaxindex(LBound(dataset,2)到UBound(dataset,2))
,这样您就不必调整
i
将其用作Maxindex的索引。e、 g.
Maxindex(i)=j
而不是
Maxindex(i-1)=j
;您可以使用
redim-Maxindex(LBound(dataset,2)到UBound(dataset,2),1到1)
这样您就不必转置它了。@jeeped“redim-Maxindex(LBound(dataset,2)到UBound(dataset,2),1到1”中的“1到1”是什么意思?