プロが教える店舗&オフィスのセキュリティ対策術

マクロで セル内の文字を全シート内検索する方法を教えてください
できれば、検索に含むシートのみ表示とかできますでしょうか

質問者からの補足コメント

  • s = InputBox("検索文字列=")
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
    Set x = sh.Cells.Find(what:=s)
    If x Is Nothing Then GoTo p1
    MsgBox sh.Name & x.Address
    b = sh.Name & x.Address
    sh.Activate
    x.Activate
    '---
    Do
    Set y = sh.Cells.FindNext(after:=ActiveCell)
    If y Is Nothing Then GoTo p1
    If sh.Name & y.Address = b Then GoTo p1
    MsgBox sh.Name & y.Address
    y.Activate
    Loop
    p1:
    Next
    End Sub

      補足日時:2019/04/15 15:41
  • 上記をやりましたが、うまくいかないです。
    キャンセルを押すとループになってしまします

      補足日時:2019/04/15 15:42
  • 全シートから検索はどのようにしたらよいのでしょうか

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/04/18 15:14

A 回答 (4件)

マクロでやる必要はなく、エクセルの検索機能で可能です。


全シートを選択した状態で検索すれば、全シートが検索範囲になります。

添付図では『すべて検索』の例を示していますが、通常の『検索』でもよいです。
リスト化されるかどうかの違いです。
「マクロでの全シート内検索」の回答画像4
    • good
    • 0

わたし流にアレンジしてみました。

やってみると、p1:のジャンプ先が必要ありません。xlWholei
にいているので、入力にはワイルドカードが利きます。Application.Goto を使うのがミソでしょうか。

それはともかく、ここの掲示板の質問で、マクロで、ワークブック全体の検索を既存の検索を操作してできないのかな、という質問がでましたが、わたしにとっては難問のひとつです。

'//標準モジュール
Sub SearchText()
 Dim s As Variant
 Dim sh As Worksheet
 Dim FirstAddress As String
 Dim x As Range

 s = Application.InputBox("検索文字列=")
 If s = False Then Exit Sub

 For Each sh In ActiveWorkbook.Worksheets
  Set x = sh.UsedRange.Find(What:=Trim(s), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
  If Not x Is Nothing Then
   Application.Goto x
   MsgBox sh.Name & "!" & x.Address
   FirstAddress = x.Address
   Do
    Set x = sh.UsedRange.FindNext(x)
    If FirstAddress = x.Address Then Exit Do
    Application.Goto x
    MsgBox sh.Name & "!" & x.Address  'メッセージボックスの前にセルに飛ぶ
   Loop
  End If
  FirstAddress = ""
 Next
End Sub
    • good
    • 0

No1です



『検索値を含むシートのみ表示状態にする』ということで良いのなら、こんな感じでいけるのではないかと思います。

Sub Sample()
 Dim str As String
 Dim sh As Worksheet, rg As Range

 str = InputBox("検索文字列=")
 If str = "" Then Exit Sub

 For Each sh In Worksheets
  Set rg = sh.Cells.Find(what:=str, LookAt:=xlWhole)
  sh.Visible = Not rg Is Nothing
 Next sh
End Sub
この回答への補足あり
    • good
    • 0

こんにちは



セル範囲内の文字列を検索するなら、Range.Findメソッドを利用するのが手っ取り早いと思われます。
複数シートをまとめては無理っぽいので、各シートをループして検索すれば実現できるでしょう。
https://docs.microsoft.com/ja-jp/office/vba/api/ …

>検索に含むシートのみ表示とかできますでしょうか
シートを順に検索して、1つでも見つかればそのシートは表示、無ければ非表示にすればよさそう。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A