如何在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)