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
来分隔每一列,即
IF
testing是为了避免将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