2017-05-06 12 views
2

VBAエキスパートの末尾に文字を削除します。例えばエクセルVBAの関数は、文字列

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" 

だから、最初の数までのすべての文字を削除する必要があります...

乾杯、 アンディ

+0

何か疲れましたか? – Plirkee

答えて

1

私はこのソリューションをTestet、それが動作します。最後のCharを常に見て、それが数字かどうかを調べます。そうでなければ、最後の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 
+1

迅速な返信をいただき、ありがとうございます。この例のように私は正確に必要なものです。 **しかし**他のソリューションも良いですし、私はすでに他の機能を利用しています。乾杯。 – Andy

2

次のソリューションは、あなたが探しているものかもしれません:2グループに一致するように

パターン(\w+\d+)(\w+)は言う:

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 
2

あなたは正規表現を使用することができます。最初のグループはいくつかの文字で、その後いくつかの数字が続きます。 2番目のグループはいくつかの手紙です。次に、Replace関数は、元の文字列を最初のグループだけに置き換え、2番目のグループを無視するように指示します。これはあなたにいくつかの手紙の最初のグループといくつかの数字だけを残します。

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 
2

別のアプローチ:

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 
1

あるいは正規表現もこのように使用することができます...

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