查找切片2D数组中的值 - Excel VBA

时间:2013-08-28 10:01:16

标签: arrays excel vba excel-vba

我在Excel中有一个表格,如下所示:

        A         C         D
0       0.00%     0.00%     0.00%
473     0.00%     0.00%     3.40%
641     13.80%    13.80%    10.40%
646     13.80%    13.80%    10.40%
3337    13.80%    13.80%    13.80%
3454    13.80%    13.80%    13.80%

该函数的形式为myFunction(x,y,thresholds_table),其中x可以是A,C或D,thresholds_table是整个表。该函数涉及根据x的值查找三列中的一列中的值。如果我手动指定一列(例如设置r = 2),该功能正常,但我无法确定如何选择列。

我是VBA的新手并且习惯于编程语言,对数组切片有更好的支持,所以也许我会以错误的方式解决这个问题。我试图使用的代码是:

Dim rates As Range

rates = Application.WorksheetFunction.Index(thresholds_table, 1, 0)
r = Application.WorksheetFunction.Match(x, rates)

使用INDEX函数选择顶行,然后使用Match查找列索引。但是,它始终返回VALUE错误。

这看起来一定很简单,但我已经做了很多谷歌搜索而无法找到答案!

编辑:

抱歉,我并不完全清楚:函数的这一部分没有使用“y”参数。基本上我只需要一个函数,如果x = A则返回2,如果x = C则返回3,如果x = D则返回4。我不想直接这样说,因为A / C / D将来可能会改变,所以它需要使用列标题。

1 个答案:

答案 0 :(得分:0)

也许有点长啰嗦,但这能解释一些事情吗?

Public Function myFunction(x, y, thresholds_table As Range) As Variant

    Dim rates As Variant

    With Application
        rates = .Index(thresholds_table, 1, 0)
        myFunction = .Match(x, rates)
    End With

End Function

函数返回一个数组,而不是范围对象。

这可以缩短,但我认为只需在表格中使用公式就能获得更好的表现

您的费率声明不正确 - 该函数返回一个二维数组