我有报告说我经常从两个不同的来源运行,这两个来源都有一个唯一的标识符,用于链接两个报告中的数据(我将调用字段ID" LINK ID")。此字段出现在两组导出中(但是导出来自填充不同数据点的2个不同系统)。我通常会将每个报表剪切并粘贴到新创建的工作簿中的单独工作表中,然后进行匹配。
有一次,我参与了一个子程序,该子程序将在包含" LINK ID"的列中循环。在一张纸上,然后循环显示包含相同" LINK ID"的另一列。在另一个工作表上,如果找到匹配,它将复制链接到该匹配的整行数据并将其粘贴到第一个工作表上。
我曾经处理过的代码从来没有完全完成,但是我想知道我是否可以一劳永逸地弄清楚这一点因为如果我没有用我的筛选这些代码就太棒了一次一个眼睛。
这就是我所拥有的:
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
答案 0 :(得分:1)
这是我能得到的。我假设你的表单是#A;"是您希望将数据复制到 的原始工作表,以及" VM"是您正在搜索要从复制的数据的工作表(如果它向后更改,则更改此选项)。我还将变量名称更改为更清晰:
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",您的"链接ID"全部在F列中。在" VM"中,"链接ID"都在A栏。
这将在" VM"中找到匹配项,将数据从A列复制到L,然后将其粘贴到" AY",G到S栏中。注意它&#39 ; s不完全是你问的(你要求更换原始表格中的整行),但我这样做是因为它在你的代码中。
而是替换原作中的整行" AY"工作表,将复制目标更改为Destination:=.Cells(i,"A")
。 (您可能希望在该行之前添加.Rows(i).Clear
以清除该行中的任何数据。)