VBA根据2个标准将行从一张纸复制到另一张纸

标签 vba excel

我有 2 张纸。基本上 ws1 是目的地,ws2 是源。那么我有 2 个条件,一个 ID 号,以及负责处理该 ID 号的人员的姓名。

源包含一行,其中包含“工作人员”完成的新操作/进度,需要将其粘贴到目标上才能更新它。

我阅读了周围的内容,发现自动过滤器看起来是可行的方法。我这里有一个自动过滤的代码,但我只是不确定如何“解决”这个问题。

Dim ws1 As Worksheet, ws2 As Worksheet
Dim lastrowDest As Long, currow As Long, lastrowSrc As Long
Dim critvalue1 As String


'Destination sheet (dashboard)
Set ws1 = Sheets("Destination")
'Source Sheet (source)
Set ws2 = Sheets("Source")

lastrowSrc = ws2.Range("A" & Rows.Count).End(xlUp).Offset(1).Row
lastrowDest = ws1.Range("A" & Rows.Count).End(xlUp).Row



For currow = 2 To lastrowSrc

critvalue1 = ws2.Range("E" & currow).Value

ws1.Range("A1").AutoFilter field:=5, Criteria1:=critvalue1



Next currow

end sub

如果 ID 号匹配,是否有一种简单的方法可以将行从源复制到目标? (ID号唯一)

上面的代码进行过滤,但我不确定如何复制或移动行。

提前致谢。

最佳答案

这可以使用 SUMPRODUCT 或 VLOOKUP 来完成,但如果您使用 VBA,请尝试这个

Sub copyRow()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lastrowDest As Long, currowSrc As Long, currowDest As Long, lastrowSrc As Long
Dim critvalue1 As String

Set ws1 = Sheets("Sheet2")
Set ws2 = Sheets("Sheet1")

lastrowSrc = ws2.Range("A" & Rows.Count).End(xlUp).Offset(1).Row - 1
lastrowDest = ws1.Range("A" & Rows.Count).End(xlUp).Row

For currowSrc = 2 To lastrowSrc
    critvalue1 = ws2.Range("E" & currowSrc).Value
    ws2.Cells(6, 5).Value = critvalue1
    For currowDest = 2 To lastrowDest
        If ws1.Range("E" & currowDest).Value = critvalue1 Then
           ws2.Rows(currowSrc).Copy Destination:=ws1.Range("A" & currowDest)
        End If
    Next currowDest
Next currowSrc

End Sub

我发现它比处理自动过滤器更容易。它从源工作表逐行检查目标工作表的每一行是否匹配。如果存在匹配,则将源行复制到匹配的目标行。

保持格式而不是

ws2.Rows(currowSrc).Copy Destination:=ws1.Range("A" & currowDest)

使用

ws2.Rows(currowSrc).Copy
ws1.Range("A" & currowDest).Select
Selection.PasteSpecial Paste:=xlPasteValues
Selection.PasteSpecial Paste:=xlPasteFormats

关于VBA根据2个标准将行从一张纸复制到另一张纸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657940/

相关文章:

java - 如何编写 Excel Upload 的 Junit 测试?

EXCEL:如何使用不受过滤/排序的公式在Excel表格中自动添加序列号?

vba - 可用内存不足,无法完成此操作

excel - 复制表格范围并粘贴为值

vba - VBA Excel 中循环遍历特定列的已使用范围

vba - 将功能键分配给 excel 宏

excel - VBA - 反转功能

vba - 从另一个工作簿关闭而不停止代码

Excel VBA 表单控件 - 重置列表框滚动条

vba - excel vba - 如果过滤器更改,则对数据透视表进行排序