链接来自不同工作表的数据字段

Linking Data Fields from Different Worksheets

我有报告说我 运行 经常来自 2 个不同的来源,它们都有一个唯一标识符链接两个报告中的数据(我将调用字段 ID "LINK ID")。该字段出现在两组导出中(但是导出来自填充不同数据点的 2 个不同系统)。我通常将每个报告剪切并粘贴到新创建的工作簿中的 sheet 中,然后将它们匹配起来。

有一次我开发了一个子例程,该子例程将循环遍历一个 sheet 中包含 "LINK ID" 的列,然后循环遍历包含相同 [=19] 的另一列=] 在另一个作品 sheet 上,如果找到匹配项,它将复制链接到该匹配项的整行数据并将其粘贴到第一个作品 sheet 上。

我编写的代码从未完全完成,但我正在尝试看看我是否可以一劳永逸地解决这个问题,因为如果我不必用我的代码筛选这些代码,那就太棒了眼睛一次。

这是我的资料:

Private Sub Find_And_Link()

Dim rw As Long

Dim mr2 As Long

Dim ws3 As Worksheet

Set ws3 = Sheets("VM")   

With Sheets("AY")

For rw = 2 To .Cells(Rows.Count, "F").End(xlUp).Row

If CBool(Application.CountIf(ws3.Columns(1), .Cells(rw, "F").Value)) Then

mrw = Application.Match(.Cells(rw, "F"), ws3.Columns(1), 0)

ws3.Cells(mrw, "A").Resize(1, 12).Copy _
Destination:=.Cells(rw, "G")
ws3.Rows(mrw).EntireRow.Delete
'getting rid of the row if match found

End If

Next rw

End With

Set ws3 = Nothing

End Sub

这是我能够得到的。我假设你的 sheet "AY" 是原始的 sheet 你想要将数据复制 ,而 "VM" 是sheet 您正在搜索要从 复制的数据(如果它向后更改)。我还把变量名改得更清楚一点:

Sub Find_And_Link()

Dim i As Long, copyRow As Long

Dim origWS As Worksheet, copyWS As Worksheet

Set copyWS = Sheets("VM")
Set origWS = Sheets("AY")

With origWS
    For i = 2 To .Cells(.Rows.Count, "F").End(xlUp).Row
        If CBool(Application.CountIf(copyWS.Columns(1), .Cells(i, "F").Value)) Then
            copyRow = Application.Match(.Cells(i, "F"), copyWS.Columns(1), 0)
            Debug.Print "Match found in row " & copyRow & "."
            copyWS.Cells(copyRow, "A").Resize(1, 12).Copy Destination:=.Cells(i, "G")
            copyWS.Rows(copyRow).EntireRow.Delete 'getting rid of the row if match found
        Else
            Debug.Print "No match found for Link ID " & .Cells(i, 6) & " :("
        End If
    Next i
End With

Set copyWS = Nothing

End Sub

我试过了,效果很好。注意:在"AY"中,你的"Link IDs"都在F列。在"VM"中,"Link IDs"都在A列。

这将在 "VM" 中找到匹配项,将数据从 A 列复制到 L,然后将其粘贴到 "AY",G 到 S 列中。请注意,这与您要求的不完全相同(您要求替换原始 sheet) 中的整行,但我这样做是因为它在您的代码中。

要替换原始 "AY" sheet 中的整行,请将复制目标更改为 Destination:=.Cells(i,"A")。 (您可能想在该行之前添加 .Rows(i).Clear 以清除该行中的任何数据。)