ユーザー入力条件を考慮して国データベースで検索を実行するスクリプトをExcel VBAで作成しています。検索では、3つの検索フィールドからのユーザー検索を考慮するUserForm
が不足しています。 「国」とは別に、ユーザーは「情報のカテゴリ」とそれに関心のある「情報のサブカテゴリ」に言及して検索を絞り込むことができます。これらのフィールドはすべてリストにリンクされたComboBox
です。カテゴリとサブカテゴリの例には、「地理」、「経済指標」、「メディア」、「人口統計」などがあります。 ユーザーから提供された条件に応じて、スクリプトは検索結果(データベースと一致するものがあれば)を返します。あるいは、一致するものが見つからないことをアドバイスするMsgBox
を返します。私はMsgBox
に表示されているテキストが固定されているのか、それともユーザーが入力した変数に依存できるのか疑問に思っていました。ユーザー入力変数を持つMsgBox
例として、米国に関する情報を探していて、この基準のみが満たされた検索を実行するユーザーを明確にするためです。データベースには米国に関する情報があり、入手可能なすべての情報が返されます。すべてのデータにかかわらず、ユーザーは特に米国のメディアに関する情報を求め、これらの2つの基準で検索を繰り返します。ただし、データベースには特に米国とメディアに関する情報はありません。この場合、スクリプトはMsgBox
を返します。現時点では自分のコードに従って、正常に動作していますが、「データベースにはこの検索に一致する情報はありません」と表示されます。
私の質問は:MsgBox
は、ユーザー検索に依存するメッセージを返すことができます。つまり、この例では、「米国のメディアに関する情報はありません」というようなものを返しますか?ご助力ありがとうございます。
この
が検索を実行するコードです:country = Sheets("Results").Range("D5").Value
Category = Sheets("Results").Range("D6").Value
Subcategory = Sheets("Results").Range("D7").Value
finalrow = Sheets("Database").Range("A200000").End(xlUp).Row
For i = 2 To finalrow
'If the country field is left empty
If country = "" Then
Sheets("Results").Range("B10:J200000").Clear
MsgBox "You must select a country in order to search the database. Please do so in the drop-down list provided."
Sheets("Results").Range("D5").ClearContents
Sheets("Results").Range("D6").ClearContents
Sheets("Results").Range("D7").ClearContents
Exit Sub
'If the country field is filled in and there results from the search made
ElseIf Sheets("Database").Cells(i, 1) = country And _
(Sheets("Database").Cells(i, 3) = Category Or Category = "") And _
(Sheets("Database").Cells(i, 4) = Subcategory Or Subcategory = "") Then
'Copy the headers of the table
With Sheets("Database")
.Range("A1:I1").Copy
End With
Sheets("Results").Range("B10:J10").PasteSpecial
'Copy the rows of the table that match the search query
With Sheets("Database")
.Range(.Cells(i, 1), .Cells(i, 9)).Copy
End With
Sheets("Results").Range("B20000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
ElseIf Sheets("Database").Cells(i, 1) = country And _
(Sheets("Database").Cells(i, 3) <> Category) Then
MsgBox "The database has no information that matches this search."
Sheets("Results").Range("D5").ClearContents
Sheets("Results").Range("D6").ClearContents
Sheets("Results").Range("D7").ClearContents
Exit Sub
End If
Next i
投稿する前にコードを入力してください。ありがとう – user1
私が書いたコードを提供しました。ありがとうございました。 – franciscofcosta