如果 VBA 中的单元格不是数字,如何删除整行?我的代码删除了所有内容
How to delete entire row if a cell is not numeric in VBA? My code deletes everything
如果 A 列中的单元格不是数字,我想删除整行。网上有很多 material,但出于某种原因,我的代码删除了所有数字和非数字数据
有什么想法吗?
谢谢
Sub Test_If_Numeric()
Dim LastRow As Long
Dim i As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = LastRow To 1 Step -1
If Not IsNumeric(i) > 0 Then
Rows(i).EntireRow.Delete
End If
Next
End Sub
也许我必须设置一个范围?也许我 As Long 还不够;任何想法如何做到这一点或解决方案? :)
您的 Not IsNumeric(i) > 0
语句将始终是 True
因为:
i
是 LastRow
到 1
之间的数字,意味着 IsNumeric(i)
总是 returns True
True > 0
always returns False
(比较 non-converted 布尔值和真数总是 returns False
)
Not False
总是returnsTrue
为了删除所有 non-numeric 行,请尝试将 If Not IsNumeric(i) > 0 Then
替换为 If Not IsNumeric(Range("A" & i).Value) Then
虽然您可以遍历一个范围,但另一种方法是一次删除所有 non-numeric 行。特此在 A:A
列中提供一些示例数据的小示例
运行 使用 SpecialCells(xlCellTypeConstants, 2)
:
的代码
Sub DelNonNumeric()
Dim Rng As Range
With ThisWorkbook.Sheets("Sheet1") 'Change sheetname accordingly
Set Rng = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeConstants, 2)
Rng.Rows.EntireRow.Delete
End With
End Sub
导致:
如果 A 列中的单元格不是数字,我想删除整行。网上有很多 material,但出于某种原因,我的代码删除了所有数字和非数字数据
有什么想法吗? 谢谢
Sub Test_If_Numeric()
Dim LastRow As Long
Dim i As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = LastRow To 1 Step -1
If Not IsNumeric(i) > 0 Then
Rows(i).EntireRow.Delete
End If
Next
End Sub
也许我必须设置一个范围?也许我 As Long 还不够;任何想法如何做到这一点或解决方案? :)
您的 Not IsNumeric(i) > 0
语句将始终是 True
因为:
i
是LastRow
到1
之间的数字,意味着IsNumeric(i)
总是 returnsTrue
True > 0
always returnsFalse
(比较 non-converted 布尔值和真数总是 returnsFalse
)Not False
总是returnsTrue
为了删除所有 non-numeric 行,请尝试将 If Not IsNumeric(i) > 0 Then
替换为 If Not IsNumeric(Range("A" & i).Value) Then
虽然您可以遍历一个范围,但另一种方法是一次删除所有 non-numeric 行。特此在 A:A
列中提供一些示例数据的小示例运行 使用 SpecialCells(xlCellTypeConstants, 2)
:
Sub DelNonNumeric()
Dim Rng As Range
With ThisWorkbook.Sheets("Sheet1") 'Change sheetname accordingly
Set Rng = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeConstants, 2)
Rng.Rows.EntireRow.Delete
End With
End Sub
导致: