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