首页 文章

Excel VBA - 如果单元格是整数,则删除整行

提问于
浏览
3

我一直在尝试使用一些片段来说明如何删除Excel VBA上的整行,但我无法修改它们以包含“IsNumber”验证 .

我需要能够选择一个活动区域,例如:

Set r = ActiveSheet.Range("A1:C10")

并且当它经过一行一行(并检查该区域的每个单元格)时,如果单元格上有数字,则删除整行 .

例如:

NA NA NA 21
NA 22 NA 44
00 NA NA NA
NA NA NA NA
55 NA NA NA

然后宏将删除所有行,除了第4行

NA NA NA NA

3 回答

  • 5

    拿你的选择:)

    WAY 1 (TRIED AND TESTED)

    这使用 SpecialCells 来标识具有数字的行 .

    Sub Sample()
        Dim ws As Worksheet
        Dim rng As Range
    
        On Error GoTo Whoa
    
        Set ws = Sheets("Sheet1")
    
        With ws
            Set rng = .Cells.SpecialCells(xlCellTypeConstants, xlNumbers).EntireRow
    
            rng.ClearContents '<~~ or rng.Clear if cells have formatting
    
            .Cells.Sort Key1:=.Range("A1")
        End With
    
        Exit Sub
    Whoa:
        MsgBox Err.Description
    End Sub
    

    WAY 2 (TRIED AND TESTED)

    这使用循环和 Count() 来检查数字

    Sub Sample()
        Dim ws As Worksheet
        Dim delrange As Range
        Dim lRow As Long, i As Long
    
        On Error GoTo Whoa
    
        Set ws = Sheets("Sheet1")
    
        With ws
            lRow = .Range("A" & .Rows.Count).End(xlUp).Row
    
            For i = 1 To lRow
                If Application.WorksheetFunction.Count(.Rows(i)) > 0 Then
                    If delrange Is Nothing Then
                        Set delrange = .Rows(i)
                    Else
                        Set delrange = Union(delrange, .Rows(i))
                    End If
                End If
            Next i
    
            If Not delrange Is Nothing Then delrange.Delete
        End With
    
        Exit Sub
    Whoa:
        MsgBox Err.Description
    End Sub
    

    Way 3 (TRIED AND TESTED)

    这使用自动过滤器 . 我假设第1行有 Headers ,你的范围内没有空白单元格 .

    Sub Sample()
        Dim ws As Worksheet
        Dim lRow As Long, lCol As Long, i As Long
        Dim ColN As String
    
        On Error GoTo Whoa
    
        Set ws = Sheets("Sheet1")
    
        With ws
            lRow = .Range("A" & .Rows.Count).End(xlUp).Row
            lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    
            For i = 1 To lCol
                '~~> Remove any filters
                .AutoFilterMode = False
                ColN = Split(.Cells(, i).Address, "$")(1)
    
                '~~> Filter, offset(to exclude headers) and delete visible rows
                With .Range(ColN & "1:" & ColN & lRow)
    
                    .AutoFilter Field:=1, Criteria1:=">=" & _
                    Application.WorksheetFunction.Min(ws.Columns(i)), _
                    Operator:=xlOr, Criteria2:="<=" & _
                    Application.WorksheetFunction.Max(ws.Columns(i))
    
                    .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
                End With
    
                '~~> Remove any filters
                .AutoFilterMode = False
            Next
        End With
    
        Exit Sub
    Whoa:
        MsgBox Err.Description
    End Sub
    
  • 0
    Sub DeleteNumeric()
    
        Dim i As Long
        Dim rCell As Range
        Dim rRow As Range
        Dim rRng As Range
    
        'identify the range to search
        Set rRng = Sheet1.Range("A1:D5")
    
        'loop backwards when deleting rows
        For i = rRng.Rows.Count To 1 Step -1
            'loop through all the cells in the row
            For Each rCell In rRng.Rows(i).Cells
                If IsNumeric(rCell.Value) Then
                    'delete the row and go to the next one
                    rCell.EntireRow.Delete
                    Exit For
                End If
            Next rCell
        Next i
    
    End Sub
    
  • 1
    Dim currentPos As Integer
    
    currentPos = 1
    
    Do While (currentPos < yourNumberofRow)
    If (Range("A" & currentPos).Value.IsNumeric = True) Then
        Rows(currentPos & ":" & currentPos).Select
        Selection.Delete
    End If
    
    currentPos = currentPos +1
    Loop
    

    不要尝试简单的代码来理解删除和IsNumeric测试 .

相关问题