如果单元格中的第一个字母是字母,则删除行

我试图循环遍历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