Excel VBA-如果单元格为整数,则删除整行
我一直在尝试使用一些关于如何在ExcelVBA上删除整行的代码片段,但我无法修改它们以包含“IsNumber”验证 我需要能够选择一个活动区域,如: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 你
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(“是一个数值”)结束IfRange(“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