显示两个比较范围内的单元格值匹配的地址

时间:2018-06-25 16:57:32

标签: excel vba excel-vba

我有两个带有数字ID的Excel工作表。我希望将列表1与列表2进行比较,找到匹配项的地方将返回每个匹配项的相应单元格地址。

enter image description here

我可以通过VBA浏览每个列表,并在小列表中返回匹配项的地址,但在大列表中找不到匹配项的地址。 任何帮助,将不胜感激。我想现实是,当前显示的地址消息只是循环中的下一个单元格。

Sub FindMatchAddress()
Dim ws As Worksheet
Dim wsInp As Worksheet
Dim wsRD As Worksheet
Dim rngInp As Range
Dim rngRD As Range

Set wsInp = Worksheets("Sheet1")

Set wsRD = Worksheets("Sheet2")

Set rngInp = wsInp.Range("B2:B11")

  For Each cell In rngInp
    If IsError(Application.Match(cell, rngRD, 0)) Then
    Else
        MsgBox cell.Address
        cell.Offset(, 12) = "Found"
    End If

Next cell

End Sub

谢谢。

2 个答案:

答案 0 :(得分:0)

使用Range.Find怎么样?并按照评论中的说明设置rngRd

Option Explicit

Sub FindMatchAddress()
    Dim ws As Worksheet
    Dim wsInp As Worksheet
    Dim wsRD As Worksheet
    Dim rngInp As Range
    Dim rngRD As Range
    Dim rng As Range, tmpRng As Range

    Set wsInp = Worksheets("Sheet1")
    Set wsRD = Worksheets("Sheet2")
    Set rngInp = wsInp.Range("B2:B11")
    Set rngRD = wsInp.Range("D2:D16")

    For Each rng In rngInp
        Set tmpRng = rngRD.Find(What:=rng.Value, LookIn:=xlValues, LookAt:=xlWhole)

        If Not tmpRng Is Nothing Then
            MsgBox tmpRng.Address
            rng.Offset(, 12) = "Found"
        End If
    Next rng

End Sub

答案 1 :(得分:0)

菲尔,读完您的问题后,我想当然地认为“数字ID”在同一列中,但在不同的工作表上。如果我是正确的,那么下面的代码应该可以正常工作。该代码在worksheet2中找到匹配的值,而不仅仅是在工作表1“ N列”中仅放置“找到”,而是添加工作表2的名称和单元格地址。如果您的“数字ID”在不同的列中,请更改ws2列字母以适合您。我已经在模拟数据上对其进行了测试,并且效果很好。我已经尽力使它保持简单。

Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = ThisWorkbook.Worksheets("Sheet2")

Dim lRow1 As Long
    lRow1 = ws1.Range("B" & Rows.Count).End(xlUp).Row

Dim lRow2 As Long
    lRow2 = ws2.Range("B" & Rows.Count).End(xlUp).Row

For i = 2 To lRow1
    For j = 2 To lRow2
        If ws1.Range("B" & i).Value = ws2.Range("B" & j).Value Then
            ws1.Range("B" & i).Offset(, 12).Value = "Found: " & ws2.Name & "." & ws2.Range("B" & j).address
        End If
    Next j
Next i