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

Excel VBA-如果单元格为整数,则删除整行,excel,vba,delete-row,Excel,Vba,Delete Row,我一直在尝试使用一些关于如何在ExcelVBA上删除整行的代码片段,但我无法修改它们以包含“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 然后宏将删除所有行,但第四行除外 NA NA NA NA 你

我一直在尝试使用一些关于如何在ExcelVBA上删除整行的代码片段,但我无法修改它们以包含“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
然后宏将删除所有行,但第四行除外

NA NA NA NA
你挑吧:)

方式1(经过尝试和测试)

这使用
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
方式3(经过尝试和测试)

这使用自动过滤器。我假设第1行有标题,并且在您的范围内没有空白单元格

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
子样本()
将ws设置为工作表
暗淡的lRow尽可能长,lCol尽可能长,i尽可能长
像线一样暗的颜色
关于错误转到哇
设置ws=图纸(“图纸1”)
与ws
lRow=.Range(“A”&.Rows.Count).End(xlUp).Row
lCol=.Cells(1,.Columns.Count).End(xlToLeft).Column
对于i=1至lCol
“~~>删除任何筛选器
.AutoFilterMode=False
ColN=Split(.Cells(,i).Address,“$”)(1)
“~~>筛选、偏移(以排除标题)和删除可见行
带.Range(ColN和“1:”&ColN和lRow)
.自动筛选字段:=1,标准1:=“>=”&_
Application.WorksheetFunction.Min(ws.Columns(i))_
运算符:=xlOr,准则2:=“
Dim currentPos作为整数
currentPos=1
Do While(当前位置

不尝试,但简单的代码可以理解delete和IsNumeric测试。

谢谢!它确实删除了正确单元格的内容,但是,如果单元格是数字,我想删除整行。我尝试了“rng.delete”“但它似乎不是这样…它删除行的内容,然后在底部推空行。如果行有任何格式,您也可以使用
rng.Clear
而不是
rng.ClearContents
。谢谢您的帮助!我制作了一个非常小的版本,带有那个特殊的部分。我在我的原始帖子中添加了一条评论,由于范围重叠,您不能使用Delete。我还用方式2更新了上面的代码。
范围(“A”¤tPos).Value.IsNumeric
?犯错误。IsNumeric的用法如下:
If(IsNumeric(Range(“A3”))然后MsgBox(“是一个数值”)结束If
Range(“B1:C5”)。特殊单元格(xlCellTypeConstants,xlNumbers)。EntireRow.delete谢谢大家的建议和帮助。上面的评论正是我想要的,我希望它能帮助别人。这是一种不正确的使用方法,它可能在任何时候抛出错误。我给了你两种经过试验的方法,你是说这两种方法都没有用?
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
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
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