在foreach中删除行

我试图更新一个.CSV文件的导入工作表..我可以读取和更新所有的信息。 更新后,我想删除一些数据。 所有的D空行必须被删除(整行)。

为此,我有一个检查D3:D486(是最后一行)的foreach。 运行macros后,有一些行被删除,但不是所有的行。

Dim rCell As Range Dim rRng As Range Debug.Print CStr(LastRow) Set rRng = Worksheets("sheet1").Range("D3:D" + CStr(LastRow)) For Each rCell In rRng.Cells If Not IsEmpty(rCell) Then Debug.Print rCell.Row Else Debug.Print "Empty" Worksheets("sheet1").Rows(rCell.Row).Delete End If Next rCell 

我猜这是for-each的问题。举个例子,如果他删除了第100行,下一次他去第101行..但那就是前一行102 ..我可以保存单元格可能在一个数组中,但那么它会是一样的。 除非我走另一条路(从下到上)。 我该如何解决这个问题?

我认为你已经回答了你自己的问题:从下到上…

你也可以尝试range.EntireRow.Delete方法,如下所示

 Dim rCell As Range Dim lastRow, i lastRow = 1000 For i = lastRow To 1 Step -1 ' if condition met Worksheets("Sheet1").Range("D:" + i).EntireRow.Delete Next 

我会这样做:

 Dim i As Integer Dim rRng As Range Debug.Print CStr(LastRow) Set rRng = Worksheets("sheet1").Range("D3:D" + CStr(LastRow)) For i = 1 To rRng.Cells.Count If Not IsEmpty(Worksheets("Sheet1").Range("D:" + i).Value) Then Debug.Print rCell.Row Else Debug.Print "Empty" Worksheets("Sheet1").Range("D:" + i).EntireRow.Delete i = i - 1 End If Next 

雷克斯答案是正确的,如果你想变得可爱,你也可以这样做:

 Sub DeleteRowsWithCriteria() Dim rng As Range, rngCell As Range, rngDelete As Range Set rng = Worksheets("sheet1").UsedRange.Columns("D:D").Cells 'Watch out here, if columns AC are not all used, this doesn't work For Each rngCell In rng If rngCell.Value = "" Then If rngDelete Is Nothing Then Set rngDelete = rngCell Else Set rngDelete = Union(rngDelete, rngCell) End If End If Next rngCell rngDelete.EntireRow.Delete xlShiftUp End Sub