牛、豚、鶏、どれか一つ食べられなくなるとしたら?

画像のように手作業で検索した場合、下に検索結果の個数が表示されますが
これをVBA内で取得することは可能でしょうか?

マクロの記録だと

Sub Macro()
Cells.Find(What:="a", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, MatchByte:=False, SearchFormat:=False).Activate
End Sub

となるのですが、最後に全部の個数を取得したいです。

「検索した後の見つかった件数を取得したい」の質問画像

A 回答 (2件)

Find メソッドを使いつつ、数えるのとセル選択をさせる場合の例。



VBA のヘルプで Range.Find メソッドを見ると、「同じ検索を繰り返すときは、FindNext メソッドおよび FindPrevious メソッドを使用します。」と載っています。「および」というか「または」のつもりだと思いますが。FindNext を実行するたびに、カウンターを増やしていけばいいです。

なお Find メソッドでは検索対象が見付からなかった場合に、セル番地を求めようなどとすると、マクロがエラーになってしまいます。そのため一旦、検索されたセルを変数に代入し、それが Nothing か否かを確認するのがよいと思います。


Sub Macro()
  Dim c As Range
  Dim fst_add As String, other_add As String
  Dim cnt As Long
  Set c = Cells.Find(What:="a", After:=ActiveCell, MatchByte:=False)
  If c Is Nothing Then
    MsgBox 0 & "セルが見つかりました"
    Exit Sub
  End If
  fst_add = c.Address
  Do Until other_add = fst_add
    Set c = Cells.FindNext(c)
    other_add = c.Address
    cnt = cnt + 1
  Loop
  c.Select
  MsgBox cnt & "セルが見つかりました"
End Sub
    • good
    • 0
この回答へのお礼

回答頂きありがとうございました。

お礼日時:2013/11/04 15:38

こんばんは!


安直な方法で・・・

Sub Sample1()
Dim c As Range, cnt As Long
For Each c In ActiveSheet.UsedRange
If InStr(c, "a") > 0 Then
cnt = cnt + 1
End If
Next c
MsgBox cnt & "件みつかりました。"
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

回答頂きありがとうございました。

お礼日時:2013/11/04 15:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!