- ベストアンサー
エクセルの検索マクロ
以下のようなマクロを作成しようとしているのですが、なかなかうまくいきません。 どなたかご教授お願いいたします。 ・セル(A,2)に入力されている文字を検索ボタンを押すことで検索する ※検索ボタンはコマンドボタン ・検索対象は、Book内の全シート ・検索後は、見つかったセルに移動 ・見つからなかった場合は、”ありません”を表示
- みんなの回答 (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)
最初の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)
セルではなく、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)
一応参考までに 最初のシートの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つ以上合った場合? 最初に見つかった時点で終了でよいのか? それぞれあると思いますので、そちらの都合に合わせて編集してみてください。
- n-jun
- ベストアンサー率33% (959/2873)
>・セル(A,2)に入力されている文字 は検索対象にはいるのですか? >・検索対象は、Book内の全シート の絡みから。
補足
ご回答ありがとうございます。 セル(A,2)は検索対象に入りません。 よろしくお願いいたします。
補足
ご回答ありがとうございます。 一枚のシート上に 2つ以上あることはありません。 また、検索する値はBook内で一つとなります。 シートは全部で12枚あり、それぞれに検索ボタンを作成する予定です。 なので、検索ボタンを押すシートの前後も検索対象となってしまうのです。。。 難しそうなので、検索ボタンを押したシートのみ検索対象としようかとも思っています。