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