错误的Vlookup输出VBA



我有以下代码片段:

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的单元格,先前的已成功查找值。

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

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 

如何适应我的代码?

使用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/

最新更新