如何在VBA中使用OFFSET工作表函数?
我想创build一个模拟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
我想到了。 为了我的需要,索引工作得很好。
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
尝试这个:
With Application.WorksheetFunction xlookup = .Vlookup(v, r, .Match(h, r.Offset(0,0),0), False) End With
没有testing,我把它留给你。
这可以通过Evaluate()函数简单地完成。
这个评估function是超强大的。 它可以把你的公式input到正常的Excel中,然后马上给你答案。 例如,如果你在一个特定单元格中有一个公式,例如= sum(A1:A4),那么在VBA中你只需要评估(“= sum(A1:A4)”)!
有一点需要注意的是你需要正确数量的括号,否则会返回#value
如果其他人正在寻找这个答案,Excel公式
OFFSET( A1, 1, 2, 3, 4 )
在VBA中
Range("A1").Resize(3, 4).Offset(1, 2)
在这个问题中, offset(r,0,0,1)
只是为了得到(列)范围内的第一个单元格,所以在VBA中可以简化为r(1)
。