我在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将来可能会改变,所以它需要使用列标题。
答案 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
函数返回一个数组,而不是范围对象。
这可以缩短,但我认为只需在表格中使用公式就能获得更好的表现
您的费率声明不正确 - 该函数返回一个二维数组