【问题标题】:Copy and paste rows between worksheets在工作表之间复制和粘贴行
【发布时间】:2013-03-21 11:05:13
【问题描述】:

我想要实现的是根据某些标准将数据从 WS1 复制到 WS3。

我有 2 个工作表:

WS1 = RAW DATA  
WS2 = ATLAS DATA

在两者的 A 列中都有唯一标识符。我想做的是创建WS3=Reconciliation。然后根据 WS1 在 WS2 中查找值。在找到匹配项的地方,我想将所有行从 WS1 复制到 WS3 我已经对一些代码进行了逆向工程,并在下面提出了一个

Sub CopyAndPaste()
Dim x As String, CpyRng As Range
Dim mFIND As Range, mFIRST As Range

    With Sheets("RAW DATA")
        Range("A:A").Select
        On Error Resume Next
End With
With Sheets("ATLAS DATA")
        Set mFIND = .Range("A:A").Find(x, LookIn:=xlValues, LookAt:=xlWhole)
        If Not mFIND Is Nothing Then
            Set CpyRng = mFIND
            Set mFIRST = mFIND

            Do
                Set CpyRng = Union(CpyRng, mFIND)
                Set mFIND = .Range("A:A").FindNext(mFIND)
            Loop Until mFIND.Address = mFIRST.Address

            CpyRng.EntireRow.Copy Sheets("Rec").Range("A" & Rows.Count).End(xlUp).Offset(1)
        End If
    End With
End Sub

【问题讨论】:

  • 需要帮助才能使我的代码正常工作,我以为我之前说过。如果我没有,我很抱歉。

标签: excel vba


【解决方案1】:

根据您对问题的描述;试试这个

Option Explicit

Sub CopyAndPaste()
Application.ScreenUpdating = False

    Dim i As Long, j As Long, lastRow1 As Long, lastRow2 As Long, cnt As Long
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
    Set ws1 = ActiveWorkbook.Sheets("RAW DATA")
    Set ws2 = ActiveWorkbook.Sheets("ATLAS DATA")
    Set ws3 = ActiveWorkbook.Sheets("Reconciliation")

    lastRow1 = ws1.Range("A" & Rows.Count).End(xlUp).Row
    lastRow2 = ws2.Range("A" & Rows.Count).End(xlUp).Row
    cnt = 1

    For i = 1 To lastRow1
        For j = 1 To lastRow2
            If StrComp(CStr(ws2.Range("A" & j).Value), _
                       CStr(ws1.Range("A" & i).Value), _
                       vbTextCompare) = 0 Then
                        ws1.Activate
                        ws1.Rows(i).Select
                        Selection.Copy
                        ws3.Activate
                        ws3.Range("A" & cnt).Select
                        Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme
                        Application.CutCopyMode = False
                        cnt = cnt + 1
            End If
        Next j
    Next i
Application.ScreenUpdating = True
End Sub

【讨论】:

  • 感谢您的回复。代码正在执行,但在显示结果之前“挂起”,因此我无法确认它是否有效。如何发布我的电子表格以便于测试?如果我要求太高,我深表歉意。
  • 您可以使用this,或任何其他免费的在线托管服务
  • 在使用更强大的计算机后,我设法让代码工作。出色的工作人员,我非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多