如何在VBA中使用OFFSET工作表功能?

时间:2013-12-27 05:52:29

标签: excel vba excel-vba

我想创建一个自定义工作表函数,它模拟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

3 个答案:

答案 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