WorksheetFunction.Small:如何定义数组

我想在另一个数组上应用WorksheetFunction.Small,如下所示:

ReDim ArrSmall(Iterations, 20) For l = 1 To Iterations For k = 1 To 20 ArrSmall(l, k) = WorksheetFunction.Small(ArrResult(l, k), l) Next k Next l 

我知道这个部分: ArrResult(l,k),是错误的,因为它要求的范围,而不是我input的单个数字。 但是,我不确定如何在代码中定义范围。

这是可能的或者我必须输出一个TempSheet的值,然后回到一个数组? 我认为一个解决scheme是调用整个数组的列,但我不知道如何。

编辑:

我设法写一个虚拟的代码,正是我想要的,但奇怪的部分是当我把它应用到我原来的代码,所有的价值混合起来(它实际上构成值AFAIK)。 请参阅下面的代码:

 Sub test() ReDim ArrTest(10, 1) ReDim ArrSmall(10, 1) ArrTest = Range("A1:A10") For i = 1 To 10 ArrSmall(i, 1) = WorksheetFunction.Small(ArrTest, i) Cells(i, 2) = ArrTest(i, 1) Cells(i, 3) = ArrSmall(i, 1) Next i 

尝试在新循环之前清除整个数组。 也许是修复它…

如果你想从A1:T20中取出每一列的最小值(与Min相同),那么你可以使用TRANPOSE (使用列而不是行),然后INDEX来分隔每一列,即

IFtesting是为了避免将SMALL应用于空数组(否则会导致错误)。

 Sub B() Dim ArrSmall(1 To 1, 1 To 20) Dim lngCnt As Long Dim ArrResult ArrResult = Application.Transpose([a1:t20].Value2) For lngCnt = 1 To UBound(ArrResult, 2) If Application.Count(Application.Index(ArrResult, lngCnt)) > 0 Then _ ArrSmall(1, lngCnt) = WorksheetFunction.Small(Application.Index(ArrResult, lngCnt), 1) Next End Sub