最後に検索項目である「書名」「著者」「出版社」の3つに挑戦します。そのうちの2つの検索項目を指定された場合、と3つの検索項目をすべて指定された場合があると思いますが、これらは同じ考え方で処理できます。
いままでは、検索項目が書名について考えてきましたが、実際に著者については、検索キーは最大2つあれば十分だと考えられますし、出版社は1つだけで不都合はありません。それらをシステムに反映します。
「同一検索項目内での複数キー検索」の部分を3つの検索項目に対応できるように修正すればOKです。
(1) 考え方として1つ1つの検索条件を満足したかを確認して、3つすべての条件を満足した時、検索結果をワークシート「検索結果」にデータを追加していきます。
ただし、検索項目に何も入っていない場合でも検索条件は満足したとみなします。
もちろん、3つの検索項目とも何も入っていない時には検索をしないで「***検索項目を入力してください。」というメッセージを表示して終えます。
ワークシート「検索条件」の検索項目セル番地「E4」、「E5」、「E6」にエクセルの基本操作である「名前の定義」を使って、「書名」、「著者」、「出版社」という名前を付けてあります。この名前を使えばもっとわかりやすく見やすいVBAコードが書けます。
例
- If Range("書名").Value = "" And Range("著者").Value = "" And Range("出版社").Value = "" Then
- MsgBox "***検索項目を入力してください。***"
- Exit Sub
- End If
【説明】
「Exit Sub」は、Subプロシージャの実行中の処理を途中で抜ける場合に使用します。
<B
(2) 最後に1件も見つからない場合は、「対象データがありません。」を表示して終了する。
例
- If 検索件数 = 0 Then MsgBox "対象データがありません。"
(3) 不要な入力作業をしないように、検索項目「書名」、「著者」、「出版社」の3つのセルにカーソルがいかないように「シートの保護」を設定しましょう。(提供ファイルは、設定していませんので是非設定にチャレンジしましょう)
なお、サンプルデータbooks-search.xlsm「図書検索.xlsm」の標準モジュール「T06完成版」に参考コードを掲載しておきます。