使用宏从表中删除excel表中的整行

时间:2018-04-02 13:33:47

标签: excel vba excel-vba

我想构建一个宏,它根据在第2行到表末尾的所有行上运行的if语句从excel表中的表中删除行 - 如果第i行和第B列中的值等于0我想删除整行。

这是我写的代码,但是当我运行它时没有任何反应

Sub deleteZeroRows()

'loop for deleting zero rows
Dim wbCurrent As Workbook
Dim wsCurrent As Worksheet
Dim nLastCol, i As Integer

Set wbCurrent = ActiveWorkbook
Set wsCurrent = wbCurrent.ActiveSheet

Dim lastRow As Long

lastRow = Range("b2").End(xlDown).Select

For i = 2 To lastRow
    If wsCurrent.Cells(i, 2) = 0 Then
    wsCurrent.Cells(i, 2).EntireRow.Delete
    End If
Next i

End Sub 

3 个答案:

答案 0 :(得分:1)

用于从工作表中删除多行的

更快的方法是使用RowsRange中需要删除的所有Union存储在For中功能

退出DelRng循环后,只需在一个命令中删除整行Option Explicit '<-- always use this at the top of your code Sub deleteZeroRows() Dim wbCurrent As Workbook Dim wsCurrent As Worksheet Dim lastRow As Long, nLastCol As Long, i As Long Dim DelRng As Range Set wbCurrent = ActiveWorkbook '<-- try to avoid using Active... Set wsCurrent = wbCurrent.ActiveSheet '<-- try to avoid using Active... With wsCurrent lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row ' get last row in column B For i = 2 To lastRow If .Range("B" & i).Value = 0 Then If Not DelRng Is Nothing Then ' add another row to DelRng range Set DelRng = Application.Union(DelRng, .Rows(i)) Else Set DelRng = .Rows(i) End If End If Next i End With ' if there's at least 1 row to be deleted >> delete all rows in DelRng at 1-line If Not DelRng Is Nothing Then DelRng.Delete End Sub

我的代码评论中的更多注释。

<强>代码

class-name-format:
    - 1
    - convention: strictbem

答案 1 :(得分:0)

您的代码的更正版本看起来像

Sub deleteZeroRows()

'loop for deleting zero rows

Dim wbCurrent As Workbook
Dim wsCurrent As Worksheet
Dim nLastCol, i As Integer
    Set wbCurrent = ActiveWorkbook
    Set wsCurrent = wbCurrent.ActiveSheet
    Dim lastRow As Long
    lastRow = Range("B2").End(xlDown).Row '.Select

    For i = lastRow To 2 Step -1
        If wsCurrent.Cells(i, 2) = 0 Then
            wsCurrent.Cells(i, 2).EntireRow.Delete
        End If
    Next i

End Sub

查看herehere以获取更好的版本,了解如何根据条件删除行

答案 2 :(得分:0)

a&#34;快速&amp;愤怒&#34;代码:

Sub deleteZeroRows()
    With Range("B2", Cells(Rows.Count, 2).End(xlUp)) 'reference column B cells from row 2 down to last not empty one
        .Replace what:=0, lookat:=xlWhole, replacement:="" ' replace 0's with blanks
        If WorksheetFunction.CountBlank(.Cells) > 0 Then .SpecialCells(XlCellType.xlCellTypeBlanks).EntireRow.Delete ' delete rows where referenced range is blank
    End With
End Sub

还将删除列B内容为空白的行