我一直在尝试使用一些代码片段来删除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
答案 0 :(得分:5)
选择:)
第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
方式2(经过测试和测试)
这使用循环和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(经过测试和测试)
这使用自动过滤器。我假设第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
答案 1 :(得分:1)
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
答案 2 :(得分:0)
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测试。