Excel 提高复制行时的循环速度

Excel 提高复制行时的循环速度,excel,vba,Excel,Vba,根据列中存在的条件,我使用以下For循环将行从一个工作表复制到另一个工作表。我已经开始了一个新的项目,我需要复制数万行,而性能并没有我想要的那么快。我想知道是否有更有效的方法来完成同样的任务。我很感谢你的建议 Sub CopyThings() Dim Source As Worksheet Dim Target As Worksheet Dim c As Range Dim CriteriaRange As Range Dim CriteriaStrin

根据列中存在的条件,我使用以下For循环将行从一个工作表复制到另一个工作表。我已经开始了一个新的项目,我需要复制数万行,而性能并没有我想要的那么快。我想知道是否有更有效的方法来完成同样的任务。我很感谢你的建议

Sub CopyThings()

    Dim Source As Worksheet
    Dim Target As Worksheet
    Dim c As Range
    Dim CriteriaRange As Range
    Dim CriteriaString As String
    Dim LastRow As Long
    Dim j As Integer
    Set Source = Worksheets("source data")
    Set Target = Worksheets("target sheet")
    LastRow = Source.Cells(Rows.Count, 1).End(xlUp).Row

    With Source
        Set CriteriaRange = Source.Range(.Cells(2, 5), .Cells(LastRow, 5))
    End With

    j = 2
        For Each c In CriteriaRange
            CriteriaString = c.Text
                Select Case CriteriaString
                    Case Is = "thing to copy"
                        Source.Rows(c.Row).Copy Target.Rows(j)
    j = j + 1
                End Select
            Next c

    Source.Rows(1).Copy Target.Rows(1)

End Sub

您可以尝试在一次复制操作中复制所有匹配的行:

Sub CopyThings()
    With Worksheets("source data").UsedRange
        .AutoFilter
        .AutoFilter Field:=5, Criteria1:="=thing to copy"
        .Copy Worksheets("target sheet").Range("A1")
    End With
End Sub

您可以尝试在一次复制操作中复制所有匹配的行:

Sub CopyThings()
    With Worksheets("source data").UsedRange
        .AutoFilter
        .AutoFilter Field:=5, Criteria1:="=thing to copy"
        .Copy Worksheets("target sheet").Range("A1")
    End With
End Sub

您在每个单元格中循环查找“要复制的内容”,然后复制整行。“要复制的内容”是否仅存在于每行的一列中?如果是这样的话,您可以循环查看
标准范围中的每一行,检查该文本可能存在的列,然后复制。这比检查范围内的每个单元格要快得多。@jnevil字符串“thingtocopy”只存在于每行的一列中。“CriteriaRange”是此列的使用范围。如果我没有弄错的话,这个脚本已经完成了您所描述的。可能是一些简单的事情,例如
If c=“thing to copy”然后c.row.copy target.cells(target.rows.count,“A”).end(xlup).offset(1)
@daveExcel这与Source.rows(c.row)有何不同?复制target.rows(j)?啊……我想不会,但它确实减少了大约6行代码。你在每个单元格中循环寻找“要复制的东西”,然后复制整行。是“要复制的东西”吗“每行中仅存在一列?如果是这样的话,您可以循环查看
标准范围中的每一行,检查该文本可能存在的列,然后复制。这比检查范围内的每个单元格要快得多。@jnevil字符串“thingtocopy”只存在于每行的一列中。“CriteriaRange”是此列的使用范围。如果我没有弄错的话,这个脚本已经完成了您所描述的。可能是一些简单的事情,例如
If c=“thing to copy”然后c.row.copy target.cells(target.rows.count,“A”).end(xlup).offset(1)
@daveExcel这与Source.rows(c.row)有何不同?复制target.rows(j)?啊……我想不会,但它确实减少了大约6行代码。