我有以下代码片段:
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/