我正在尝试遍历A列中的一个范围,并删除单元格A中的值以字母开头的每一行(例如,删除C159,但不删除8T9G3)。我认为代码可以正常工作,如果我得到了直接的片断。有什么建议我可以让代码工作?
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
谢谢!
答案 0 :(得分:1)
要检查字符串的第一个字符,请使用函数Left()。 找出if不是数字的最简单方法是函数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
答案 1 :(得分:1)
一些问题:
删除行时, k 会增加,实际上会跳过一行,而不检查。因此,最好使用 k 向下以避免此问题。
与ASCII值进行比较的方法语法错误,因为您需要在每个>=
和<=
运算符之前的和之后显式指定值。但是,我建议使用更短的语法,而不是进行更正(这将是一个很长的时间):
检查字母可以用更易读的方式完成,不需要知道ASCII码。当放入大写字母时,只需检查第一个字符是否与放入小写字母时不同。如果是,那就是一封信。
您错过Then
行末尾的If
关键字;
代码:
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