こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Excel VBA 条件検索について

ExcelVBAで 「データ検索後リスト表示をして、そのリストから該当するシートを選べば表示される」 というユーザーフォームを作成したいのですが、やり方がよく解りません。どなたか教えて下さい。

具体的には 「コマンドボタンが押された時に、ユーザーフォーム内のテキストボックスに入力された値(名称、日付等)と、複数のシート内のセルの値(名称、日付等)を比較して、一致(全一致、一部一致)した場合、ユーザーフォーム内のリストボックスに表示させる」 というものと 「リストボックスに表示されたものの中から見たいシートを選択すると、そのシートを表示する」 というものです。

リストの表示形式は
シート名   名称  日付等
Sheet1    りんご  2013.01.01
Sheet2    りんご  2013.01.02

という具合にしたいと思っています。
ちなみに複数のシートと言いましたが、マスターシートを作りコピーして使用しますので、同一形式のものになります。

以上になります。
色々やってみましたが、うまくいきませんので、どなたか解る方は教えて下さい。
よろしくお願いします。

投稿日時 - 2013-10-15 08:29:39

QNo.8306336

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

こんな感じでどうでしょうか。不具合等あったら申し訳ありません。

前提として
「日付等」の列は日付のみ(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

投稿日時 - 2013-10-15 19:46:00

お礼

返事が遅くなり申し訳ありません。
回答していただきありがとうございます。
参考にさせていただきます。

投稿日時 - 2013-10-19 23:02:58

あなたにオススメの質問