2012-04-10 2 views
2

Ich versuche, eine Funktion zu schreiben, die eine Zeichenkette aufnimmt, analysiert und eine andere Zeichenkette zurückgibt, die die Anzahl der aufeinanderfolgenden alphanumerischen Zeichen in der ursprünglichen Zeichenkette zusammenfasst.Analysiere Format der alphanumerischen Zeichenkette

Zum Beispiel kann die Zeichenkette 999aa45bbx zurückkehren würde 3N2A2N3A, d.h.

  • 3 Zahlen,
  • von 2 alpha gefolgt,
  • von 2 Zahlen,
  • von 3 alpha.

Ich verwende die Funktion, um Formate von Versicherungsvertrag ID-Nummern zu analysieren. Bisher habe ich online Lösungen gefunden, die entweder alphanumerische oder numerische Zeichen extrahieren, aber nichts, das das Format oder die Reihenfolge beschreibt, in der diese Zeichen in der ursprünglichen Zeichenkette vorkommen.

Kann jemand helfen?

+2

Scheint, wie Sie konnte es einfach Schleife durch die Zeichenfolge ein Zeichen zu einem Zeitpunkt, zu prüfen, ob das Zeichen numerisch oder alpha ist, und Zählung halten. Hast du so etwas probiert? Wenn ja, würde es helfen zu posten, was Sie haben, auch wenn es nicht funktioniert. –

Antwort

8

A regexp wie dies den Job

  • Presse zusammen tun, um die VBE
  • Insert Modul
  • Kopieren Sie den Code unten
  • drücken zusammen zurück zu gehen gehen nach Excel

t hen können Sie die Funktion in Excel verwenden (die ungültige Strings erkennt auch),
=AlphaNumeric(A1)

enter image description here

Function AlphaNumeric(strIn As String) As String 
    Dim objRegex As Object 
    Dim objRegMC As Object 
    Dim objRegM As Object 
    Dim strOut As String 
    Set objRegex = CreateObject("vbscript.regexp") 
    With objRegex 
     .Global = True 
     .ignorecase = True 
     .Pattern = "[^\w]" 
     If .test(strIn) Then 
      AlphaNumeric = "One or more characters is invalid" 
     Else 
      .Pattern = "(\d+|[a-z]+)" 
      Set objRegMC = .Execute(strIn) 
      For Each objRegM In objRegMC 
       strOut = strOut & (objRegM.Length & IIf(IsNumeric(objRegM), "N", "A")) 
      Next 
      AlphaNumeric = strOut 
     End If 
    End With 
End Function 
4

Alte Schule in B1, dh, durch alle Zeichen im String Looping:

Function IdentifyCharacterSequences(s As String) As String 
    Dim i As Long 
    Dim charCounter As Long 
    Dim currentCharType As String 
    Dim sOut As String 

    sOut = "" 
    charCounter = 1 
    currentCharType = CharType(Mid(s, 1, 1)) 

    For i = 2 To Len(s) 
     If (Not CharType(Mid(s, i, 1)) = currentCharType) Or (i = Len(s)) Then 
      sOut = sOut & charCounter & currentCharType 
      currentCharType = CharType(Mid(s, i, 1)) 
      charCounter = 1 
     Else 
      charCounter = charCounter + 1 
     End If 
    Next i 

    IdentifyCharacterSequences = sOut 
End Function 

Dies verwendet die folgende Hilfsfunktion. Beachten Sie, dass nicht-alphanumerische Zeichen mit dem Buchstaben "X" gekennzeichnet werden. Sie können dies leicht für Ihre Zwecke ändern.

Function CharType(s As String) As String 
    If s Like "[A-z]" Then 
     CharType = "A" 
    ElseIf s Like "[0-9]" Then 
     CharType = "N" 
    Else 
     CharType = "X" 
     'Or raise an error if non-alphanumerical chars are unacceptable. 
    End If 
End Function 

Anwendungsbeispiel:

enter image description here

Verwandte Themen