问题描述
我正在尝试在VBA中编程一个引用另一个工作簿的VLookup。基本上,我正在尝试在两本工作簿中进行查找。
这是我的目标的简单概述:
- 在workbook1的A列的所有行中查找值
- 从工作簿2的A列(与工作簿1中的A列相对应的值)和C列(要复制的值)中提取信息,并在相应的单元格(行)中将其放置在Workbook1的B列中。其他条件:(1)如果单元格中已经有值,请覆盖;(2)如果未找到单元格的值,则保持单元格不变。因此也没有#N / A。
- 继续并重复该过程,直到workbook1的A列中没有剩余的条目为止
下面是我已经拥有的代码。我偶然发现了代码无法正常工作的事实。我一直在B列的每一行获得#N / As,同时至少应该找到一些值并将其粘贴到某些单元格中。为了进行测试,我将工作簿2中的引用表复制到工作簿1中的工作表中,当我在同一工作簿1中引用该特定工作表时,该代码似乎可以正常工作。
Sub Import()
Dim rw As Long,x As Range
Dim extwbk As Workbook,twb As Workbook
Set twb = ThisWorkbook
Set extwbk = Workbooks.Open("C:\Documents\workbook2.csv")
Set x = twb.Worksheets("Sheet1").Range("A1:H100")
With twb.Sheets("Sheet1")
For rw = 2 To .Cells(Rows.Count,1).End(xlUp).Row
.Cells(rw,2) = Application.Vlookup(.Cells(rw,1).Value2,x,3,False)
Next rw
End With
End Sub
您在我的代码中看到错误吗?还是有人有更好的方法来完成这项任务?最好,我也想打开一个选定的文件,而不是引用完整路径。
谢谢!
解决方法
也许试试看:
For ...
on Error Resume Next
.Cells(rw,2).Value = WorksheetFunction.Vlookup(.Cells(rw,1).Value,x,3,False))
Next ...
但是,如果我对,“ x”是您搜索值的范围,并且被定义为同一张纸上的范围。这样范围会重叠!?
,可能因为此行:
Set x = twb.Worksheets("Sheet1").Range("A1:H100")
引用了错误的工作簿。应该是:
Set x = extwbk.Worksheets("Sheet1").Range("A1:H100")
处理N / A值 在您的循环中尝试这样的代码:
For rw = 2 To .Cells(Rows.Count,1).End(xlUp).Row
If Application.IsNA(Application.VLookup(.Cells(rw,1).Value2,False)) Then
.Cells(rw,2) = "NOT FOUND"
Else
.Cells(rw,2) = Application.VLookup(.Cells(rw,False)
End If
Next rw
将“找不到”替换为您要显示的内容,或者如果要保留空白单元格,则替换为“”。