EXCEL VBA V查找多张工作表

EXCEL VBA Vlookup multiple sheets

请帮助新手,我无法解决这个问题。越来越糊涂了。

我有一个包含 2 个工作表的工作簿。

两个工作表中的 A 列都是零件号代码。

两个工作表中的 B 列是 A 列中零件号的折扣代码。

两个工作表中的 C 列都是零件编号取代(新零件编号)列,但并非所有行在 C 列中都有新零件编号,C 列中的某些单元格为空。

新的部件号 C 列没有在 D 列中填充任何折扣代码。

我的 objective 是用从 B 列中找到的相关折扣代码填充两个工作表中的 D 列,但仅针对 C 列中实际填充了零件号的每个单元格,查看两个工作表1和工作表 2.

worksheet1

worksheet2

到目前为止,我在以下方面收效甚微,但我只是触及表面,相信一些 VBA 将是更好的解决方案,但我变得非常迷茫。

=XLOOKUP(D2,Sheet1!A:A & Sheet2!A:A,B:B,0,1)

这段代码不是一个完整的公式,只是部分起作用。

请帮忙。谢谢。

使用 Dictionary Object 作为查找 table

Option Explicit

Sub macro1()

    Dim ws As Worksheet
    Dim lastrow As Long, i As Integer, r As Long
    Dim dict As Object, key, n As Long

    Set dict = CreateObject("Scripting.Dictionary")
    ' build look up from sheet 1 and 2
    For i = 1 To 2
        Set ws = Sheets(i)
        lastrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
        For r = 1 To lastrow
           key = Trim(ws.Cells(r, "A"))
           If dict.exists(key) Then
               MsgBox "Duplicate Part No '" & key & "'", vbCritical, "Row " & r
               Exit Sub
           Else
               dict.Add key, ws.Cells(r, "B")
           End If
        Next
    Next
   
    ' update col D on both sheets
    For i = 1 To 2
        Set ws = Sheets(i)
        lastrow = ws.Cells(Rows.Count, "C").End(xlUp).Row
        For r = 1 To lastrow
           key = Trim(ws.Cells(r, "C"))
           If Len(key) > 0 Then
               If dict.exists(key) Then
                    ws.Cells(r, "D") = dict(key)
                    n = n + 1
                End If
            End If
        Next
    Next
    MsgBox n & " rows updated", vbInformation

End Sub