根据VBA中列的内容删除行

时间:2016-05-03 18:23:47

标签: excel vba excel-vba

我是VBA的初学者,所以我可能犯了非常基本的错误。 我想删除工作簿的每个工作表中的所有行,其中该行在列S中没有条目。

我使用以前回答的问题中的一些见解编写了以下代码,但它没有按预期工作:

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
For Each cell In Range("s1:s400")
    If IsEmpty(cell) Then
    cell.EntireRow.Delete shift:=xlUp
    End If
Next
Next

根本没有遵循第一个循环。只有活动工作表删除了任何行。 第二个循环的应用不一致,因为并非所有S列中都有空单元格的行都被删除。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:2)

两件事。

首先,您需要将工作表分配给范围对象,因此Range("s1:s400")应为ws.Range("s1:s400")

第二个在循环中删除行时,向后循环。这不能在For Each循环中完成,因此更改为常规for循环和Step -1

Dim ws As Worksheet
Dim i As Long

For Each ws In ThisWorkbook.Worksheets
    For i = 400 To 1 Step -1
        If ws.Cells(i, "S").Value = "" Then
            ws.Rows(i).Delete
        End If
    Next
Next

有关删除行的更多更快的方法,请参阅HERE