链接来自不同工作表的数据字段
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
以清除该行中的任何数据。)
我有报告说我 运行 经常来自 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
以清除该行中的任何数据。)