我想创建一个自定义工作表函数,它模拟vlookup-match-offset组合并只接受3个参数:垂直查找值,水平查找值以及包含返回值和标题/左边距的数组。如果这些值由v,h和r表示,我希望自定义函数模拟:
= VLOOKUP(V,R,匹配(H,偏移量(R,0,0,1),0),假)
我尝试编写的代码如下(使用Excel 2010):
Function xlookup (v as Variant, h as Variant, r as Range) as Variant
xlookup = Application.WorksheetFunction.Vlookup(v, r, _
Application.WorksheetFunction.Match(h, _
Application.WorksheetFunction.Offset(r,0,0,1),0),false)
不幸的是,我认为Offset
不是WorksheetFunction
的方法。将范围的第一行作为范围返回的最佳方法是什么?
谢谢,
JSR
答案 0 :(得分:3)
我明白了。根据我的需要,Index工作正常。
Function xlookup(v As Variant, h As Variant, r As Range) As Variant
With Application.WorksheetFunction
xlookup = .VLookup(v, r, .Match(h, .Index(r, 1, 0), 0), False)
End With
End Function
答案 1 :(得分:2)
如果有其他人正在寻找答案,那么Excel公式
OFFSET( A1, 1, 2, 3, 4 )
VBA中的是
Range("A1").Resize(3, 4).Offset(1, 2)
<小时/> 在问题中,
offset(r,0,0,1)
只是为了获得(列)范围内的第一个单元格,因此可以在VBA中将其简化为r(1)
。
答案 2 :(得分:1)
这可以通过Evaluate()函数非常简单地完成。
这个评估功能非常强大。它可以将您输入的公式输入普通Excel并立即给出答案。例如,如果您在特定单元格中有公式,例如= sum(A1:A4),那么在VBA中您只需进行评估(“= sum(A1:A4)”)!
要警惕的一件事是你需要正确数量的括号,否则它将返回#value