WorksheetFunction.Small:如何定义Array

时间:2016-02-29 19:39:48

标签: arrays excel vba

我想将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),

尝试在新循环之前清除整个数组。也许那就解决了......

1 个答案:

答案 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