VBA中VLOOKUP的问题

时间:2009-08-21 14:23:02

标签: excel vba excel-vba

所有

我正在尝试在简单的VBA函数中使用vlookup,但它不断返回#VALUE!

以下是代码:

Public Function getAreaName(UBR As Integer) As String

  Dim result As String
  Dim sheet As Worksheet
  Set sheet = ActiveWorkbook.Sheets("UBR Report")
  ' check level 3 then 2 then 4 then 5
  result = Application.WorksheetFunction.VLookup(UBR, sheet.Range("UBRLookup"), Application.WorksheetFunction.Column(sheet.Range("UBRLookup[Level 3]")), False)
  getAreaName = result

End Function

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

我不太确定你正在试图用“UBRLookup [Level 3]”参考,但正如约瑟夫所指出的,那就是你做错了。

[不是Excel中命名范围的有效字符。

您引用的列需要是一个数值,即您定义为命名范围的表数组起始处的偏移量。

如果要拉出的列是您指定范围内的第二列(例如,您所指的[级别3]在第二列中),则下面应该有效。

Public Function getAreaName(UBR As Integer) As String

  Dim result As String
  Dim sheet As Worksheet
  Set sheet = ActiveWorkbook.Sheets("UBR Report")
  result = Application.WorksheetFunction.VLookup(UBR, sheet.Range("UBRLookup"), 2, False)
  getAreaName = result

End Function

<强>更新
我已经看过Excel 2007,从我可以看到列函数没有公开为Application.WorksheetFunction。 您可以使用=Column(D4)在工作表上使用它,但在尝试在vba编辑器中自动完成时,该功能不存在。这可能是因为版本不同,所以我暂时忽略它。

看起来你似乎错误地使用了第三个论点。如果你真的不想使用数字引用,我们需要找出函数出错的地方。

按照

的几项测试
Debug.Print Application.WorksheetFunction.Column(D4)
Debug.Print sheet.Range("UBRLookup[Level 3]")

应该有助于向您展示它出错的确切位置 - 我相信它会反对上述两种情况,但如果它返回一些有用的信息,那么我们可能会更接近您的解决方案。

答案 1 :(得分:1)

让你的功能更多。然后调试它并确保每个部分都按照您期望的方式设置。

示例:

Public Function getAreaName(UBR As Integer) As String
    Dim result As String
    Dim sheet As Worksheet
    Set sheet = ActiveWorkbook.Sheets("UBR Report")
    Dim range as Range = sheet.Range("UBRLookup")
    Dim column as Column = Application.WorksheetFunction
            .Column(sheet.Range("UBRLookup[Level 3]"))
    result = Application.WorksheetFunction.VLookup(UBR, range, column, False)
    getAreaName = result
End Function

事实上,就这样,我发现了一些奇怪的东西。你在两个不同的地方使用一个范围,但是在一个地方你正在寻找UBRLookup,而在另一个地方你正在寻找UBRLookup [Level 3],这是正确的吗?

答案 2 :(得分:1)

我很不安 Dim column as Column =
Application.WorksheetFunction.Column(sheet.Range("UBRLookup[Level 3]"))

我认为你应该将列调暗,并且可能使用一个不要与属性混淆的变量名,比如lngCol。

答案 3 :(得分:0)

此部分: sheet.Range(“UBRLookup [Level 3]”)可疑,因为“UBRLookup [Level 3]”不是有效的范围名称。