当多列中的单元格为空或0时,删除整行

时间:2017-11-01 22:15:27

标签: excel vba excel-vba

我正在尝试编写一个代码,它基本上会查看第13-33行并删除整行,如果列B-M中的单元格都是空白而且列A不是空白。

我在下面写的第一个代码只有当B列中的单元格为空时才会删除整行,但我需要将B-M中的所有单元格都空白才能删除整行。

java.util.List

我尝试在下面的代码中以不同的方式编写它,但不能达到预期的效果。

Sub scheduleA()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Sheets("Schedule A Template").Select

Dim RowstoDelete As Long
x = 33
For RowstoDelete = Cells(x, 2).End(xlUp).Row To 13 Step -1

If (Cells(RowstoDelete, 2).Value = "0") And (Cells(RowstoDelete, 1).Value <> "") Then
        Rows(RowstoDelete).Delete Shift:=xlUp
    End If


Next RowstoDelete
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

请帮忙!

1 个答案:

答案 0 :(得分:1)

行删除的条件是:列A不为空,列B到M为空。那么这样的事情应该可以解决问题:

OWNER   ACCOUNT   MONEY  isMAX
Admin   account1  500    YES  
Admin   account2  500    YES
Admin   account3  300    NO

请注意Sub ScheduleA() On Error GoTo errHandler Const TOP_ROW As Long = 13 Const BOTTOM_ROW As Long = 33 Dim rowIndex As Long Application.ScreenUpdating = False Application.Calculation = xlCalculationManual With ThisWorkbook.Worksheets("Schedule A Template") For rowIndex = .Cells(BOTTOM_ROW, "A").End(xlUp).Row To TOP_ROW Step -1 If Not IsEmpty(.Cells(rowIndex, "A").Value2) Then '...column A is not blank. If Application.WorksheetFunction.CountA(.Range(.Cells(rowIndex, "B"), .Cells(rowIndex, "M"))) = 0 Then '...all cells on row rowIndex from columns B to M are blank. .Rows(rowIndex).Delete Shift:=xlUp End If End If Next End With Cleanup: On Error Resume Next Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Exit Sub errHandler: MsgBox Err.Description, vbExclamation + vbOKOnly, "Error" Resume Cleanup End Sub 已消失;你几乎没有必要选择任何东西来完成工作。不依赖于选择将使您的代码更加健壮。在上面的代码中,只要表达式以句点开头,.Select块就会告诉其中的代码引用目标工作表,例如With

此外,关闭.CellsScreenUpdating时,系统地包含错误处理以重新打开它们。这样,如果出现问题,您的代码将不会使Excel处于不良状态。

最后,不是通过其选项卡的名称引用工作表(从Excel中看到),您可以直接使用它们的CodeName来引用它们,如VBA编辑器所示,在“属性”窗口中,在工作表的(名称)属性下(按Ctrl + R显示Project Explorer,单击Microsoft Excel Objects节点下的工作表,然后按F4显示Properties窗口)。你可以改变这个值;我通常会将其更改为shtScheduleATemplate。然后,Calculation行可以重写为:

With

...即使您从Excel更改了工作表的名称,它仍然可以正常工作。

编辑:在您的问题代码中,您在确定启动循环的底行索引时检查B列。但是,通过这样做,您可能会遗漏一些应删除的行。我已将我的答案改为在A栏中进行检查:

With shtScheduleATemplate