Range.Find匹配列

时间:2018-03-20 09:19:50

标签: excel-vba match vba excel

我正在尝试匹配来自2个不同工作表(wsMaster& wsSample)的col C和col B,并从wsSample中检索col F以将其放在wsMaster中的col D中。我的代码在下面运行,但没有结果。我的代码有什么问题吗?

j = 2    
Do While wsMaster.Cells(j, 3).Value <> ""
    Set rngcell = wsSample.Range("B:B").Find(What:=wsMaster.Cells(j, 3), After:=wsSample.Range("A2"), LookIn:=xlValues, Lookat:=xlWhole, SearchOrder:=xlRows, SearchDirection:=xlNext)
    If Not rngcell Is Nothing Then wsMaster.Cells(j, 4) = rngcell.Offset(0, 4)
    j = j + 1
Loop

本地窗口显示我的rngcell = Nothing但我不太清楚为什么。 谢谢!!

2 个答案:

答案 0 :(得分:3)

您正在Range("B:B")之后Range("A2")进行搜索。因此,它没有找到任何东西。更改After范围以对应搜索范围。

检查此代码,该代码在搜索范围内具有搜索到的值,但它给出了错误13,因为After位于另一个范围内:

Sub TestMe()    
    'On Error Resume Next        
    Dim rngCell As Range
    Range("B1") = "test"
    Set rngCell = Range("B:B").Find("test", Range("A1"))
    If rngCell Is Nothing Then Debug.Print "Not Found!"    
End Sub

如果取消注释On Error Resume Next(您可能正在使用),它将找不到该值。

答案 1 :(得分:2)

实际上,您的代码运行会令人惊讶,它应该会给您

  

运行时错误13:类型不匹配

更改为:

Set rngcell = wsSample.Range("B:B").Find(What:=wsMaster.Cells(j, 3), After:=wsSample.Range("B2"), LookIn:=xlValues, Lookat:=xlWhole)

或完全删除After

Set rngcell = wsSample.Range("B:B").Find(What:=wsMaster.Cells(j, 3), LookIn:=xlValues, Lookat:=xlWhole)

注意:您也可以将Range("B:B")更改为Columns(2)