【问题标题】:Excel VBA function to remove letters at end of stringExcel VBA函数删除字符串末尾的字母
【发布时间】:2017-05-06 19:45:45
【问题描述】:

VBA 专家,

我正在寻找构建一个函数,该函数将从字符串变量中删除最后一个字母 [A-Z]。

例如:

Sub Example()
Dim MyString() as string
...
ReDim Preserve MyString(3)

MyString(1) = "ABC345A"
MyString(2) = "DEFG6789BC"
MyString(3) = "AHIL2431LTR"

MyString(1) = RemLetters(MyString(1))
MyString(2) = RemLetters(MyString(2))
MyString(3) = RemLetters(MyString(3))
...
...
End Sub

Function RemLetters(MyString)
???
End Function

...

我期待函数返回:

MyString(1) = "ABC345"
MyString(2) = "DEFG6789"
MyString(3) = "AHIL2431"

所以应该删除第一个数字之前的所有字母...

干杯, 安迪

【问题讨论】:

  • 你累了吗?

标签: vba excel


【解决方案1】:

我测试了这个解决方案并且它有效。它总是查看最后一个字符并查看它是否是数字。如果没有,它会切断最后一个 Char 等等。

Sub Example()
    Dim MyString() As String

ReDim Preserve MyString(3)

MyString(1) = "ABC345A"
MyString(2) = "DEFG6789BC"
MyString(3) = "AHIL2431LTR"

MyString(1) = RemLetters(MyString(1))
MyString(2) = RemLetters(MyString(2))
MyString(3) = RemLetters(MyString(3))

End Sub

Function RemLetters(MyString As String) As String
Dim bolExit As Boolean
bolExit = True
Do While bolExit = True
    Select Case Asc(Right$(MyString, 1))
            Case 65 To 90, 97 To 122
                'IsLetter = True
                MyString = Left$(MyString, Len(MyString) - 1)
            Case Else
                'IsLetter = False

                bolExit = False
        End Select
Loop
RemLetters = MyString
End Function

【讨论】:

  • 感谢大家的及时回复。看起来这个例子正是我需要的。 但是其他解决方案也很好,我已经看到其他功能可以使用它们。干杯。
【解决方案2】:

您可能正在寻找以下解决方案:

Option Explicit

Function RemLetters(MyString As String) As String

Dim i As Long

MyString = StrReverse(MyString)
For i = 1 To Len(MyString)
    If Asc(Mid(MyString, i, 1)) >= 48 And _
        Asc(Mid(MyString, i, 1)) <= 57 Then Exit For
Next i
RemLetters = Mid(StrReverse(MyString), 1, Len(MyString) - i + 1)

End Function

【讨论】:

    【解决方案3】:

    你可以使用正则表达式:

    (\w+\d+)(\w+) 模式表示匹配 2 个组。第一组是一些字母,然后是一些数字。第二组是一些字母。然后Replace 函数说用第一组替换原始字符串,忽略第二组。这只剩下第一组一些字母和一些数字。

    Option Explicit
    
    Sub Example()
    
        Dim MyString() As String
    
        ReDim Preserve MyString(3)
    
        MyString(1) = "ABC345A"
        MyString(2) = "DEFG6789BC"
        MyString(3) = "AHIL2431LTR"
    
        MyString(1) = RemLetters(MyString(1))
        MyString(2) = RemLetters(MyString(2))
        MyString(3) = RemLetters(MyString(3))
    
        Debug.Print MyString(1)
        Debug.Print MyString(2)
        Debug.Print MyString(3)
    
    End Sub
    
    Function RemLetters(MyString) As String
        Dim objRegex As Object
        Dim strOut As String
    
        Set objRegex = CreateObject("VBScript.Regexp")
        With objRegex
            .Pattern = "(\w+\d+)(\w+)"
            .Global = True
            strOut = .Replace(MyString, "$1")
        End With
    
        RemLetters = strOut
    
    End Function
    

    【讨论】:

      【解决方案4】:

      另一种方法:

      Public Function RemoveCharFromString(ByVal stringValue As String) As String
      
          Dim idx As Long, charCounter As Long
          For idx = Len(stringValue) To 1 Step -1
              If IsNumeric(Mid(stringValue, idx, 1)) Then Exit For
              charCounter = charCounter + 1
          Next idx
      
          RemoveCharFromString = Left(stringValue, Len(stringValue) - charCounter)
      End Function
      

      【讨论】:

        【解决方案5】:

        或者RegEx也可以这样使用...

        Function RemLetters(MyString) As String
            Dim objRegex As Object
            Dim strOut As String
        
            Set objRegex = CreateObject("VBScript.Regexp")
            With objRegex
                .Pattern = "\w+\d+"
                .Global = False
                If .test(MyString) Then strOut = .Execute(MyString)(0)
            End With
        
            RemLetters = strOut
        
        End Function
        
        Sub Example()
        
            Dim MyString() As String
        
            ReDim Preserve MyString(3)
        
            MyString(1) = "ABC345A"
            MyString(2) = "DEFG6789BC"
            MyString(3) = "AHIL2431LTR"
        
            MyString(1) = RemLetters(MyString(1))
            MyString(2) = RemLetters(MyString(2))
            MyString(3) = RemLetters(MyString(3))
        
            Debug.Print MyString(1)
            Debug.Print MyString(2)
            Debug.Print MyString(3)
        
        End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-02
          • 1970-01-01
          • 2011-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多