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

我一直在尝试使用一些片段来说明如何删除Excel VBA上的整个行,但我不能修改它们以包含“IsNumber”validation。

我需要能够select一个活跃的领域,如:

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 

然后macros将删除所有的行,除了第四个是

 NA NA NA NA 

把你的select:)

方法1(试验和testing)

这使用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 

方法2(试验和testing)

这使用循环和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 

方式3(试验和testing)

这使用自动filter。 我假设行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 
 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 

不要试图简单的代码来理解删除和IsNumerictesting。