2017-10-26 15 views
1

私はちょうどexcelでいくつかのVBAを試し始めました。選択のコメントにある単語の出現回数を数えようとしています。ここでは、私がこれまで持っているものです。コメント内の文字列の出現をカウントする

Function CountStringInComments(strText As String, ByVal Target As Range) As Long 

Dim c As Comment 
Dim n As Long 

For Each c In Target.Comments 
n = n - (InStr(1, c.Text, strText, vbTextCompare) > 0) 
Next 

CountStringInComments = n 
Set c = Nothing 
End Function 

と私の関数を呼び出すと、次のようになります。私は、#VALUEを取得

=CountStringInComments("bruit",Z55:Z58) 

!エラー。

私はVBに精通していないので、助けていただければ幸いです。ありがとう。

+0

説明を提供できますか?あなたがコメントで言うときは、これはExcelの1つのセルか、セルのリストですか? または このコメントはVBAコードに記載されていますか? – RazorSky

+1

Excelのセルのリストを探しています(VBAコードではありません) –

答えて

2

コメントがないセルをイタレートし、そのセルのコメントテキストを検索する必要があります。

Function CountStringInComments(strText As String, ByVal Target As Range) As Long 

Dim c As Range 
Dim n As Long 

For Each c In Target.Cells 
    If Not c.Comment Is Nothing Then 
     n = n - (InStr(1, c.Comment.Text, strText, vbTextCompare) > 0) 
    End If 
Next 

CountStringInComments = n 
Set c = Nothing 
End Function 

enter image description here

+0

ありがとうございます。私はあなたのコードを試して、私は同じエラーが発生しているようです。 –

+0

@FrançoisChampagneそれは私のために働いています、セルはコメントの内容を示しています。 –

+0

私は別のワークシートでそれを動作させることができましたが、今度は別のワークシートでうまくいかない理由を理解する必要があります。御時間ありがとうございます! –

0

あなたは(単一のコメントで複数回を含む)すべての一致をカウントしたい場合、あなたは次のように行うことができます:

Function CountStringInComments(str As String, ByVal r As Range) As Long 

    Dim re As RegExp 
    Set re = New RegExp 
    re.Global = True 
    re.Pattern = str 
    re.IgnoreCase = True 

    Dim cell As Range 
    For Each cell In r 
     If Not cell.Comment Is Nothing Then 
      Dim mColl As MatchCollection 
      Set mColl = re.Execute(cell.Comment.Text) 
      CountStringInComments = CountStringInComments + mColl.Count 
     End If 
    Next cell 

End Function 

マイクロソフトのVBScriptの正規表現を参照する必要が5.5

関連する問題