2

文字列を取り込んで解析し、元の文字列内の連続する英字または数字の数を要約した別の文字列を返す関数を作成しようとしています。

たとえば、文字列999aa45bbxは を返します3N2A2N3A

  • 3つの数字、
  • 続いて 2 つのアルファ、
  • 2つの数字で、
  • 3アルファまで。

関数を使用して、保険証券の ID 番号の形式を分析しています。これまでのところ、英字または数字のいずれかを抽出するソリューションをオンラインで見つけましたが、これらの文字が元の文字列に存在する形式や順序を説明するものはありません。

誰でも助けることができますか?

4

2 に答える 2

8

このような正規表現は仕事をします

  • を一緒に押して VBE に移動します
  • モジュールを挿入
  • 以下のコードをコピーして貼り付けます
  • を一緒に押して Excel に戻ります

次に、Excel内、つまりB1で関数(無効な文字列も検出します)を使用できます
=AlphaNumeric(A1)

ここに画像の説明を入力

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
于 2012-04-10T02:50:42.017 に答える
4

文字列内のすべての文字をループする昔ながらの方法:

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

これは、次のヘルパー関数を使用します。英数字以外の文字は、文字「X」を使用して識別されることに注意してください。これは、目的に合わせて簡単に変更できます。

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

使用例:

ここに画像の説明を入力

于 2012-04-10T09:15:45.040 に答える