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
请帮助新手,我无法解决这个问题。越来越糊涂了。
我有一个包含 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