Vlookup输出VBA不正确

时间:2015-05-14 13:24:53

标签: vba loops vlookup

我有以下代码段:

For i = 2 To n
    Postcode = Cells(i, 3)

    Cells(i, "M") = Postcode

    On Error Resume Next
    EndFrameOutput = Application.WorksheetFunction.VLookup(Postcode, Dealerws3.Range("C3:D" & LastRowDealer), 2, False)
    On Error GoTo 0

    Cells(i, 4) = EndFrameOutput
Next

结果输出似乎填满应该有N / A的单元格,前一个成功查找了值。

例如: 如果我有这个查找表:

Postcode    |   x
------------+-------
AB12 3BJ    |   1
IV1 1RY     |   2

这个搜索数组:

Postcode
----------
AB12 3BJ
BE49 3GK
CG89 6KL
IV1 1RY
ML47 1KK

使用我的代码,返回第2列我得到......

Postcode    |   Looked up Value
------------+-------------------
AB12 3BJ    |   1
BE49 3GK    |   1
CG89 6KL    |   1
IV1 1RY     |   2
ML47 1KK    |   2

而不是

Postcode    |   Looked up Value
------------+--------------------
AB12 3BJ    |   1
BE49 3GK    |   n/a
CG89 6KL    |   n/a
IV1 1RY     |   2
ML47 1KK    |   n/a 

如何调整我的代码?

1 个答案:

答案 0 :(得分:0)

使用Application.VLookup代替Application.WorksheetFunction.VLookup。后者在未找到查询时抛出应用程序错误。前者返回错误作为结果,然后您可以处理。由于您只想将#N/A作为输出,因此您无需对其执行任何特殊操作。

摆脱那些On Error电话。你不需要具有不同功能的它们,但一般来说你应该避免使用它们。

For i = 2 To n
    Postcode = Cells(i, 3)

    Cells(i, "M") = Postcode

    EndFrameOutput = Application.VLookup(Postcode, Dealerws3.Range("C3:D" & LastRowDealer), 2, False)

    Cells(i, 4) = EndFrameOutput
Next

这是对这些功能之间差异的一个很好的参考。 http://dailydoseofexcel.com/archives/2004/09/24/the-worksheetfunction-method/