如果列J,K和L都是0 / $ 0.00,如何在Excel中删除整行?

我试图删除Excel 2013中的整个行,但只有列K,L和M中的所有单元格都是0 / $ 0.00。

我的数据示例: Excel数据表

我想让它保留第2 – 11行,因为它们都包含K,L或M中的某些内容。我发现并试图使用的当前代码似乎只能识别列L和M,因为它正在删除行2在K列中有一个数字。我不想计算连续3个单元格的总数,因为如果我有K列的$ 500和L列的$ 500的数字,他们将等于$ 0.00,但是我需要这一行,因为有数据。

我发现两个问题非常类似于我在这个网站上提出的问题,所以我试图将代码应用到我正在做的事情上,但是我一直在做错事,因为我无法让它工作。

如果列B和C都为空,则Excel VBA删除整行

如果特定范围内的单元格全部为空,则删除整行

这是我发现并试图使用的代码。 难道不能工作,因为1列是正数,其他2是负数? 我真的很新使用VBA等,所以我很抱歉,如果这是非常简单的事情。

Sub DeleteRows() Dim rng As Range, cel As Range Dim N As Long For N = rng.Rows.Count To 1 Step -1 If rng.Cells(N, 1) = 0 And rng.Cells(N, 2) = 0 Then rng.Cells(N, 1).EntireRow.Delete shift:=xlShiftUp End If Set rng = ActiveSheet.Range("L1:L" & ActiveSheet.Range("L" & ActiveSheet.Rows.Count).End(xlUp).Row) If rng.Cells(N, 1) = 0 And rng.Cells(N, 2) = 0 Then rng.Cells(N, 1).EntireRow.Delete shift:=xlShiftUp End If Set rng = ActiveSheet.Range("M1:M" & ActiveSheet.Range("M" & ActiveSheet.Rows.Count).End(xlUp).Row) If rng.Cells(N, 1) = 0 And rng.Cells(N, 2) = 0 Then rng.Cells(N, 1).EntireRow.Delete shift:=xlShiftUp End If Next N End Sub 

我实际使用并每天使用的电子表格通常包含12000到15000行(文件大小总是大约2.5MB)。 我真的很感激任何帮助,我能做些什么来完成这项工作。 谢谢

你可能想试试这个代码:

 Option Explicit Sub DeleteRows() With ActiveSheet '<--| refer to active sheet (you may want to explicitly refer to a named worksheet: 'With Worksheets("mySheet")') With .Range("A1").CurrentRegion.Offset(, .UsedRange.Columns.Count).Resize(, 1) '<--| refer to a range in a "helper" column just outside the used range occupying the same rows as your data .FormulaR1C1 = "=if(countif(RC11:RC13,0)=3,1,"""")" '<--| use "helper" column to mark "KLM-zero's" rows with a "1", while leaving others with a "blank" mark If WorksheetFunction.Sum(.Cells) > 0 Then .SpecialCells(XlCellType.xlCellTypeFormulas, xlNumbers).EntireRow.Delete '<--| delete any row whose "helper" column cell is marked with "1" .Clear '<--| clear "helper" column End With End With End Sub 

如果我正确理解你的话

 Sub DeleteRows() Dim rw As Range, r 'start on the last row With ActiveSheet.Range("A1").CurrentRegion.EntireRow Set rw = .Rows(.Rows.Count) End With Do While rw.Row > 11 r = Application.CountIf(rw.Cells(1, "K").Resize(1, 3), 0) Set rw = rw.Offset(-1, 0) If r = 3 Then rw.Offset(1, 0).Delete Loop End Sub