2016-06-22 16 views
-1

にconsective一連の文字の最初のインスタンスを数える:Excelは、だから私はこのようになります文字列持つ文字列

99999999999999999999999999999FFFFFFFFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99999を^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ C

私は、与えられた連続した文字のシリーズの最初のインスタンスの長さをカウントしようとしています。

例:

所与チャーとして「9」、それは9のの最初のセットをカウントし、所定のチャーとして30

「F」を返すべきで、それが最初のために、11を返すべき30 "9"の後に始まる連続した "F"のセット。

Excelでこれを行うので、式/ VBAソリューションが理想的です。必要に応じて、任意のコードをVBAに変換することができます。Reg-Exソリューションがあるように感じますが、私はJon SnowですREG-EX、私は何も知らない。任意の洞察/アドバイスを事前に

感謝。

答えて

1

これは私はあなたのサンプルデータでそれを試してみましたし、動作するように見えた?助けるん。

Function number_Appearances(ByVal myText As String, ByVal myRng As Range) 
Dim cel As Range 
Dim txtFound As Boolean 
Dim celText$ 

Dim findText$ 
findText = myText 

Set cel = myRng 
celText = cel.Text 

Dim celLen& 
celLen = Len(celText) 

txtFound = True 

Dim i&, k& 
Dim iChar$ 
For i = 1 To celLen 
    iChar = Mid(celText, i, 1) 
    If iChar = findText And txtFound = True Then 
     k = k + 1 
    ElseIf k > 0 And iChar <> findText Then 
     txtFound = False 
    End If 
Next i 

Debug.Print "Found " & k & " " & findText & "'s" 
number_Appearances = k 
End Function 

しかし、私は数式を考える前にこれを始めました。@ ScottCranerの提案が望ましいです、IMO。

0

私は怠け者のお尻を降ろし、解決するVBAを書いた。ありがとう、スコットとブルース。そしてはい、それは29ではなく30でした。もう一度ありがとうございます。

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 
+0

私が次回この作業を行う場合は、質問をしてから作業していることをOPに伝えてください。そして、その場合、どうして質問するのですか?まず最初にいくつかのコードを書こうとしたら、SOを尋ねるのではなく、SOに質問してから、仕事をしてみてください... – BruceWayne

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) 

これは、所望の入力の最初のグループカウントされます:

enter image description here

+0

私が座って、あなたの式、素敵な仕事を通じて考える必要があります!どのようにあなたはそれに慣れ、過去に似たようなことをやったのですか?私は私が望んだまで – BruceWayne

+1

私は壁に物事を投げ続けました。 @BruceWayne –

+0

それは私のお気に入りの方法です!乾杯! – BruceWayne

2

をそしてここでREGEXソリューションです。我々はのメタキャラクタをエスケープしなければならないことに注意してください。

関連する問題