我想将WorksheetFunction.Small应用于另一个数组:
@RunWith(JUnitParamsRunner.class)
public class JUnitParamsTest{
@Test
@Parameters
public void shouldContainNumber(String text, int number) {
assertTrue(text.contains(String.valueOf(number)));
}
public Object[] parametersForShouldContainNumber() {
return $(
$("test string 1", 1),
$("test string 2", 2)
);
}
}
我知道这一部分: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
是错误的,因为它要求的范围而不是我输入的单个数字。但是,我不确定如何在代码中定义范围。
这是可能的还是我必须在TempSheet上输出值,然后再返回数组?我认为解决方案是调用数组的整个列,但我不知道如何。
编辑:
我设法编写了一个完全符合我想要的虚拟代码,但奇怪的部分是当我将相同的代码应用到原始代码时,所有的值都混淆了(它实际上构成了值AFAIK)。请参阅下面的代码:
ArrResult(l,k),
尝试在新循环之前清除整个数组。也许那就解决了......
答案 0 :(得分:2)
如果您希望从A1:T20中获取每列的最小值(与Min
相同),那么您可以使用TRANPOSE
(处理列而不是行)然后INDEX
分隔每一列,即
IF
测试是为了避免将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