我有两个带有数字ID的Excel工作表。我希望将列表1与列表2进行比较,找到匹配项的地方将返回每个匹配项的相应单元格地址。
我可以通过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
谢谢。
答案 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