0

我在 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将来可能会改变,所以它需要使用任何列标题。

4

1 回答 1

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

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

这可以缩短,但我认为您只需在工作表中使用公式即可获得更好的性能

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

于 2013-08-28T10:27:30.543 回答