• ベストアンサー

エクセルの検索マクロ

以下のようなマクロを作成しようとしているのですが、なかなかうまくいきません。 どなたかご教授お願いいたします。 ・セル(A,2)に入力されている文字を検索ボタンを押すことで検索する  ※検索ボタンはコマンドボタン ・検索対象は、Book内の全シート ・検索後は、見つかったセルに移動 ・見つからなかった場合は、”ありません”を表示

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >シートは全部で12枚あり、それぞれに検索ボタンを作成する予定です。 そんな必要はないのですが、もし必要なら、ショートカットやメニューにしたり、他の方のおっしゃっている InputBox やいっそ、ダイアログボックスにしたほうが、シートに左右されませんね。 以下は、シートモジュールのコマンドボタンに入れるようになっています。 どのシートでも、そのシートだけは探さず、他のシートを探すようになっています。 なお、初歩的なことですが、Sheets(i) と Worksheets(i) の違いは気をつけてください。 Private Sub CommandButton1_Click() Dim sText As String Dim c As Range Dim sh As Variant  sText = ActiveSheet.Range("A2").Value  If sText = "" Then   MsgBox "検索値をA2 に入れてください。", vbCritical   Exit Sub  End If  For Each sh In ThisWorkbook.Worksheets    If Not sh Is ActiveSheet Then  Set c = sh.Cells.Find( _  What:=sText, _  LookIn:=xlValues, _  LookAt:=xlWhole, _  SearchOrder:=xlByRows, _  SearchDirection:=xlNext, _  MatchCase:=False, _  MatchByte:=False)    If Not c Is Nothing Then     Application.Goto c     Exit For    End If End If Next sh   If c Is Nothing Then    MsgBox "ありません。", vbInformation   End If End Sub

その他の回答 (4)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

最初のINPUTBOXを使って検索値を入れる事例です。 Sub Macro1() Dim rg As Range myname = InputBox("検索したい文字を入れてください") For i = 1 To ThisWorkbook.Worksheets.Count Sheets(i).Select Set rg = Cells.Find(What:=myname, After:=ActiveCell) If Not rg Is Nothing Then rg.Activate: Exit Sub Next MsgBox "このブックにはありません" End Sub

  • Avirex
  • ベストアンサー率33% (1/3)
回答No.3

セルではなく、UserForm上のTextBox1に検索文字列を入力し、 CommandButton1を押すことで検索する、というのはどうでしょうか? Excel2007の場合 Private Sub CommandButton1_Click() On Error Resume Next Cells.Find(What:=TextBox1.Text, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate End Sub バージョンが異なる場合は、Control+F(検索のショートカット) の記録を取れば問題無いと思います。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

一応参考までに 最初のシートのA2の値を検索値、変数 mynameに入れる 2枚のシートから最後のシートまでそれぞれで繰り返し。 それぞれのシートで変数 myname を探して、なければメッセージ あれば、そのセルをアクティブ Sub Macro1() Dim rg As Range myname = Sheets(1).Range("A2").Value For i = 2 To ThisWorkbook.Worksheets.Count Sheets(i).Select Set rg = Cells.Find(What:=myname) If rg Is Nothing Then MsgBox "ありません" Else rg.Activate End If Next End Sub 一枚のシート上に 2つ以上あった場合は? 複数のシートに2つ以上合った場合? 最初に見つかった時点で終了でよいのか? それぞれあると思いますので、そちらの都合に合わせて編集してみてください。

tatewaki_K
質問者

補足

ご回答ありがとうございます。 一枚のシート上に 2つ以上あることはありません。 また、検索する値はBook内で一つとなります。 シートは全部で12枚あり、それぞれに検索ボタンを作成する予定です。 なので、検索ボタンを押すシートの前後も検索対象となってしまうのです。。。 難しそうなので、検索ボタンを押したシートのみ検索対象としようかとも思っています。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>・セル(A,2)に入力されている文字 は検索対象にはいるのですか? >・検索対象は、Book内の全シート の絡みから。

tatewaki_K
質問者

補足

ご回答ありがとうございます。 セル(A,2)は検索対象に入りません。 よろしくお願いいたします。