-1

したがって、次のような文字列があります。

999999999999999999999999999999FFFFFFFFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99999^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C

特定の連続文字のシリーズの最初のインスタンスの長さを数えようとしています。

例:

指定された文字として「9」を指定すると、最初の 9 のセットをカウントして 30 を返す必要があります。

指定された文字として「F」。30 個の「9」の後に始まる連続した「F」の最初のセットに対して、11 を返す必要があります。

私は Excel でこれを行っているので、数式/VBA ソリューションが理想的です。ただし、必要に応じて任意のコードを VBA に変換できます。これには Reg-Ex ソリューションがあるように感じますが、私は Reg-Ex の Jon Snow です。私は何も知りません。

洞察/アドバイスをお寄せいただきありがとうございます。

4

4 に答える 4

2

後世のためにこれをここに置きます:

=IF(SUBSTITUTE(MID($A$1,FIND(A2,$A$1),LEN($A$1)),A2,"")="",LEN($A$1)+1,FIND(MID(SUBSTITUTE(MID($A$1,FIND(A2,$A$1),LEN($A$1)),A2,""),1,1),$A$1,FIND(A2,$A$1)))-FIND(A2,$A$1)

これは、目的の入力の最初のグループ化をカウントします。

ここに画像の説明を入力

于 2016-06-22T17:27:17.510 に答える
2

そして、これがREGEXソリューションです。メタ文字をエスケープする必要があることに注意してください。

Option Explicit
Function LenFirstInstance(findCHAR As String, searchSTRING As String)
    Dim RE As Object, MC As Object
Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = False
    .ignorecase = False
    .Pattern = Left(findCHAR, 1) & "+"
    If .Pattern Like "[\^$.|?*+()[{]*" Then _
        .Pattern = "\" & .Pattern
    If .Test(searchSTRING) = True Then
        Set MC = .Execute(searchSTRING)
        LenFirstInstance = MC(0).Length
    End If
End With

End Function
于 2016-06-22T17:30:23.523 に答える
0

私は怠け者から抜け出し、解決するために VBA を書きました。スコットとブルース、ありがとう。はい、30 ではなく 29 でした。ありがとうございました。

Public Function count_first_instance_of_consecutive_chars(the_char, the_string)
    Dim counter As Integer
    Dim iter As Long
    Dim is_a_match As Boolean

    is_a_match = False

    If the_char <> vbNullString And the_string <> vbNullString Then
        For iter = 1 To Len(the_string)
            If Mid(the_string, iter, 1) = the_char Then
                If is_a_match = True Then
                    counter = counter + 1
                ElseIf is_a_match = False Then
                    is_a_match = True
                    counter = 1
                End If
            Else
                If is_a_match = True Then
                    count_first_instance_of_consecutive_chars = counter
                    Exit For
                End If
            End If
        Next iter
    End If
End Function
于 2016-06-22T17:22:57.720 に答える