- 締切済み
Excel VBA 条件検索について
ExcelVBAで 「データ検索後リスト表示をして、そのリストから該当するシートを選べば表示される」 というユーザーフォームを作成したいのですが、やり方がよく解りません。どなたか教えて下さい。 具体的には 「コマンドボタンが押された時に、ユーザーフォーム内のテキストボックスに入力された値(名称、日付等)と、複数のシート内のセルの値(名称、日付等)を比較して、一致(全一致、一部一致)した場合、ユーザーフォーム内のリストボックスに表示させる」 というものと 「リストボックスに表示されたものの中から見たいシートを選択すると、そのシートを表示する」 というものです。 リストの表示形式は シート名 名称 日付等 Sheet1 りんご 2013.01.01 Sheet2 りんご 2013.01.02 という具合にしたいと思っています。 ちなみに複数のシートと言いましたが、マスターシートを作りコピーして使用しますので、同一形式のものになります。 以上になります。 色々やってみましたが、うまくいきませんので、どなたか解る方は教えて下さい。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- oka_me
- ベストアンサー率86% (26/30)
こんな感じでどうでしょうか。不具合等あったら申し訳ありません。 前提として 「日付等」の列は日付のみ(yyyy/mm/dd形式) 「名称」の右横の列に「日付等」の項目があるとします。 一部一致ということが具体的にどのようなことか詳細がわかりませんでしたので、とりあえず全一致で作成しました (※そのあたりは質問者様側で修正可能であれば適宜変更願います) ※日付等の欄が単純なテキスト形式であれば、 If Format(c.Offset(, 1).Value, "yyyy/mm/dd") = TextBox2.Value Then の所を単純に If c.Offset(, 1).Value = TextBox2.Value Then 等でも動くかと思います。 '検索ボタン(CommandButton1) Private Sub CommandButton1_Click() Dim c As Range Dim fc As Range Dim s As Worksheet Dim q As Long q = 0 ListBox1.Clear For Each s In ActiveWorkbook.Worksheets Set c = s.Cells.Find(what:=TextBox1.Text, lookat:=xlWhole) If Not c Is Nothing Then Set fc = c Do If Format(c.Offset(, 1).Value, "yyyy/mm/dd") = TextBox2.Value Then With ListBox1 .AddItem .List(q, 0) = s.Name .List(q, 1) = TextBox1.Value .List(q, 2) = TextBox2.Value End With q = q + 1 End If Set c = s.Cells.FindNext(c) Loop Until c.Address = fc.Address End If Next End Sub '表示ボタン(CommandButton2) Private Sub CommandButton2_Click() Sheets(ListBox1.List(ListBox1.ListIndex, 0)).Activate End Sub
お礼
返事が遅くなり申し訳ありません。 回答していただきありがとうございます。 参考にさせていただきます。