Vba 复制另一工作表中的匹配行

Vba 复制另一工作表中的匹配行,vba,excel,Vba,Excel,我有两张纸,第一张和第二张。 我正在查看表1的T列,如果表2中T包含1,则粘贴完整的行。 代码运行良好,但它将结果粘贴到sheet2中sheet1的同一行中。 这将导致行之间出现空白。任何人都可以建议,我应该用我的代码更改什么,这样我就可以按顺序获得它们,而不需要任何空行。 另外,如何将第1行中的标题从第1页复制到第2页 Sub Test() For Each Cell In Sheets(1).Range("T:T") If Cell.Value = "1" Then

我有两张纸,第一张和第二张。 我正在查看表1的T列,如果表2中T包含1,则粘贴完整的行。 代码运行良好,但它将结果粘贴到sheet2中sheet1的同一行中。 这将导致行之间出现空白。任何人都可以建议,我应该用我的代码更改什么,这样我就可以按顺序获得它们,而不需要任何空行。 另外,如何将第1行中的标题从第1页复制到第2页

Sub Test()
For Each Cell In Sheets(1).Range("T:T")
    If Cell.Value = "1" Then
        matchRow = Cell.Row
        Rows(matchRow & ":" & matchRow).Select
        Selection.Copy

        Sheets(2).Select
        ActiveSheet.Rows(matchRow).Select
        ActiveSheet.Paste
        Sheets(1).Select
    End If
Next
End Sub
不需要使用“选择”和“选择”来复制粘贴,这只会减慢代码的运行速度

Option Explicit

Sub Test()

Dim Cell As Range
Dim NextRow as Long

Application.ScreenUpdating = False

For Each Cell In Sheets(1).Range("T1:T" & Sheets(1).Cells(Sheets(1).Rows.Count, "T").End(xlUp).Row)
    If Cell.Value = "1" Then
        NextRow = Sheets(2).Cells(Sheets(2).Rows.Count, "T").End(xlUp).Row
        Rows(Cell.Row).Copy Destination:=Sheets(2).Range("A" & NextRow + 1)
    End If
Next
Application.ScreenUpdating = True

End Sub
不适用于积分

抱歉,但我无法阻止自己发帖回答。当我看到有人想用低劣的方式做某事时,我感到很痛苦:

我不赞成循环。与之相比,它非常慢

如果您仍然想使用循环,那么您可以通过不复制循环中的行,而是一次完成来加快循环速度

此外,如果您不喜欢危险的生活,那么请始终完全限定您的对象,否则您可能会复制错误的行

Option Explicit

Sub Sample()
    Dim wsI As Worksheet, wsO As Worksheet
    Dim lRow As Long, i As Long, r As Long
    Dim copyRng As Range

    Set wsI = Sheet1: Set wsO = Sheet2

    wsO.Cells.Clear

    '~~> first available row in sheet2
    r = 2

    With wsI
        lRow = .Range("T" & .Rows.Count).End(xlUp).Row

        '~~> Copy Headers
        .Rows(1).Copy wsO.Rows(1)

        For i = 1 To lRow
            If .Range("T" & i).Value = 1 Then
                If copyRng Is Nothing Then
                    Set copyRng = .Rows(i)
                Else
                    Set copyRng = Union(copyRng, .Rows(i))
                End If
            End If
        Next i
    End With

    If Not copyRng Is Nothing Then copyRng.Copy wsO.Rows(r)
End Sub
截图

很抱歉,我将不得不重复结束这个问题:为什么会这样?@SiddharthRout,这不好;顺便说一句,在整个RangeT:T中循环将非常痛苦。“自动过滤会快得多吗?”我修改了SiddharthRout,使其在占用范围内循环。我认为这已经足够快了,无论如何,我不认为把VBA开头和AutoFilter混淆是因为Good重新提出了这个问题,因为OP不想使用AutoFilter。他想绕圈子