如果单元格中的第一个字母是字母,则删除行
我试图循环遍历A列中的范围,并删除单元格A中的值以字母开头的每一行(例如,删除C159,但不是8T9G3)。 我认为这个代码可以正常工作,如果我find了一条直线。 任何build议如何让代码工作?
Sub DeleteLetterRows() Dim k as integer For k = 2 To 100 If Asc(ActiveSheet.Range("A" & k).value) >=65 and <=90 or >=97 and <=122 Rows(k).EntireRow.Delete Else End If Next k End Sub
谢谢!
一些问题:
-
当你删除一行,而k增加,你实际上跳过一行,你不检查。 所以,最好用k来降低这个问题。
-
您与ASCII值进行比较的方式的语法错误,因为您需要在每个
>=
和<=
运算符之前和之前显式指定一个值。 但是不要纠正(这会很长),我会build议一个更短的语法: -
检查一个字母可以以更可读的方式完成,而不需要了解ASCII码。 只要检查大写字母的第一个字符是否与放入小写字母时不同。 如果是这样,那是一封信。
-
If
行的末尾缺lessThen
关键字;
码:
Sub DeleteLetterRows() Dim k as integer Dim l as String For k = 100 To 2 Step -1 l = Left(ActiveSheet.Range("A" & k).value, 1) If UCase(l) <> LCase(l) Then Rows(k).EntireRow.Delete End If Next k End Sub
要检查string的第一个字符,可以使用Left()函数。 查找是否不是数字的最简单方法是函数isNumeric()。 放在一起,你会得到
Sub DeleteLetterRows() Dim k as integer Dim test As String For k = 2 To 100 test = Left(ActiveSheet.Range("A" & k).value,1) If isNumeric(test) = False then Rows(k).EntireRow.Delete Else End If Next k End Sub