从字母数字字符串中检索字母字符

时间:2014-07-11 06:03:11

标签: excel excel-vba vba

如何将AB2468123

分开

我尝试了以下几点:

myStr = "AB2468123"
split(myStr, "1" OR "2" OR "3"......."9")

我只想获得字母(字母)。

感谢。

4 个答案:

答案 0 :(得分:4)

这是我发现的最好的方法。它可能有点基础,但它确实起作用:)

    Function Split_String(Optional test As String = "ABC111111") As Variant
    For i = 1 To Len(test)
    letter = Mid(test, i, 1)
        If IsNumeric(letter) = True Then
           justletters = Left(test, i - 1)
           justnumbers = Right(test, Len(test) - (i - 1))
           Exit For
        End If
    Next
   'MsgBox (justnumbers)
   'MsgBox (justletters)

   'just comment away the answer you want to have :)
   'Split_String = justnumbers
   'Split_String = justletters

   End Function

答案 1 :(得分:3)

如何只检索输入字符串中的字母:

Function GetLettersOnly(str As String) As String
    Dim i As Long, letters As String, letter As String

    letters = vbNullString

    For i = 1 To Len(str)
        letter = VBA.Mid$(str, i, 1)

        If Asc(LCase(letter)) >= 97 And Asc(LCase(letter)) <= 122 Then
            letters = letters + letter
        End If
    Next
    GetLettersOnly = letters
End Function

Sub Test()
    Debug.Print GetLettersOnly("abc123")      // prints "abc"
    Debug.Print GetLettersOnly("ABC123")      // prints "ABC"
    Debug.Print GetLettersOnly("123")         // prints nothing
    Debug.Print GetLettersOnly("abc123def")   // prints "abcdef"
End Sub
完整性

编辑(和Chris Neilsen)这里是Regex方式:

Function GetLettersOnly(str As String) As String
    Dim result As String, objRegEx As Object, match As Object

    Set objRegEx = CreateObject("vbscript.regexp")

    objRegEx.Pattern = "[a-zA-Z]+"
    objRegEx.Global = True
    objRegEx.IgnoreCase = True

    If objRegEx.test(str) Then
        Set match = objRegEx.Execute(str)
        GetLettersOnly = match(0)
    End If
End Function

Sub test()
    Debug.Print GetLettersOnly("abc123") //prints "abc"
End Sub

答案 2 :(得分:3)

更简单的单发RegExp

Sub TestIt()
MsgBox CleanStr("AB2468123")
End Sub

Function CleanStr(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
    .Pattern = "[^a-zA-Z]+"
    .Global = True
    CleanStr = .Replace(strIn, vbNullString)
End With
End Function

答案 3 :(得分:0)

可能最快的方法是解析Byte String

Function alpha(txt As String) As String
  Dim b, bytes() As Byte: bytes = txt
  For Each b In bytes
    If Chr(b) Like "[A-Za-z]" Then alpha = alpha & Chr(b)
  Next b
End Function
  • 更多信息here