在variables中存储多个值,在子结尾处删除行

我已经写了下面的代码,它应该运行一个数据集,并删除所有不符合调用C1的值的行。 在我原来的代码中,我一行一行地删除,代码非常慢,所以现在我试图将所有值添加到一个变体,并删除所有单元格。 这可能吗?

Sub FixData() Dim wbFeeReport As Workbook Dim wsData As Worksheet Dim wsData2 As Worksheet Dim FrRngCount As Range Dim x As Long Dim y As Long Dim varRows As Variant Set wbFeeReport = ThisWorkbook Set wsData = wbFeeReport.Worksheets("Data") Set wsData2 = wbFeeReport.Worksheets("Data2") Set FrRngCount = wsData.Range("D:D") y = Application.WorksheetFunction.CountA(FrRngCount) For x = y To 2 Step -1 If wsData.Range("J" & x).Value <> wsData2.Range("C1").Value Then varRows = x Else wsData.Range("AF" & x).Value = wsData.Range("J" & x).Value End If Next x wsData.Rows(varRows).EntireRow.Delete End Sub 

现在,代码只会删除最后一行,因为每次在循环中都会覆盖该变体。 有关如何将所有值存储在变体中并删除最后不需要的行的build议?

感谢您的帮助!

最快的方法是

  • 将数据加载到数组中
  • 将有效数据复制到第二个数组中
  • 清除范围的内容
  • 写第二个数组回到工作表

 Sub FixData() Dim Source As Range Dim Data, Data1, TargetValue Dim x As Long, x1 As Long, y As Long Set Source = Worksheets("Data").Range("A1").CurrentRegion TargetValue = Worksheets("Data2").Range("C1") Data = Source.Value ReDim Data1(1 To UBound(Data, 1), 1 To UBound(Data, 2)) For x = 1 To UBound(Data, 1) If x = 1 Or Data(x, 10) = TargetValue Then x1 = x1 + 1 For y = 1 To UBound(Data, 2) Data1(x1, y) = Data(x, y) Next End If Next Source.ClearContents Source.Resize(x1).Value = Data1 End Sub 

由于你需要一个范围保存所有行,你可以收集它在一个“在运行”像这样:

 Sub FixData() Dim wsData As Worksheet wsData = ThisWorkbook.Worksheets("Data") Dim val As Variant val = ThisWorkbook.Worksheets("Data2").Range("C1").Value Dim DelRows As Range, x As Long For x = 2 To wsData.Cells(wsData.Rows.Count, 4).End(xlUp).Row If wsData.Range("J" & x).Value <> val Then If DelRows Is Nothing Then Set DelRows = wsData.Rows(x) Else Set DelRows = Union(wsData.Rows(x), DelRows) End If Else wsData.Range("AF" & x).Value = wsData.Range("J" & x).Value End If Next x DelRows.EntireRow.Delete End Sub