如何为VLookup函数传入Range参数?

时间:2012-02-29 08:15:07

标签: excel function excel-vba range vlookup vba

我在VBA中有以下两个功能。 abb00工作正常但abb11没有。

我的问题是如何传递Range变量作为VLookup函数的参数?

Function abb00() 'demo func
    abb00 = Application.WorksheetFunction.VLookup("a", _ 
        Worksheets("SheetCache").Range("A:B"), 2, False)
End Function

Function abb11() 'demo func
    rangeVar = Worksheets("SheetCache").Range("A:B")
    abb11 = Application.WorksheetFunction.VLookup("a", rangeVar, 2, False)
End Function

2 个答案:

答案 0 :(得分:4)

你可以用两种方式做到这一点

修复您的功能
您当前的功能未设置范围变量。它会像这样工作

Function abb11()
    Dim rangeVar as Range
    Set rangeVar = Worksheets("SheetCache").Range("A:B")
    abb11 = Application.WorksheetFunction.VLookup("a", rangeVar, 2, False)
End Function

将范围传递给您的功能
或者,您可以将范围传递给函数,如此

Sub GetRange()
    Dim rangeVar As Range
    Set rangeVar = Worksheets("SheetCache").Range("A:B")
    MsgBox abb2(rangeVar)
End Sub
Function abb2(ByVal rangeVar)
       abb2 = Application.WorksheetFunction.VLookup("a", rangeVar, 2, False)
End Function

答案 1 :(得分:3)

要传递范围,首先需要获取范围的引用。

你目前有这个:

rangeVar = Worksheets("SheetCache").Range("A:B")

这不会得到一个范围;它将整个范围A:B读入Variant数组。如果您想获得范围引用,则需要使用Set关键字。

Set rangeVar = Worksheets("SheetCache").Range("A:B")

具有讽刺意味的是,这不会影响abb11函数的输出(编辑:在Excel 2003中),因为VLookup可以应用于Variant数组以及到一个范围。但是,将两个整列读入数组的效率相当低,因此我会坚持使用范围引用(Set rangeVar = ...)。 编辑在Excel 2007/2010中,将两个完整列读入Variant数组可能会导致您的函数死亡,因为要加载一百万行而不是Excel 2003中的65536,这就是我正在测试。