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

时间:2016-05-06 20:05:14

标签: excel vba excel-vba

我正在尝试遍历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

谢谢!

2 个答案:

答案 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