検索条件設定フォームを使うレコード検索

TIPSメインへ戻る

概要説明

検索するフォームとは別に検索条件設定フォームを利用して検索する方法。検索条件設定フォームには、検索語を入力するテキストボックスと 検索を実行する検索実行ボタンを設け、検索結果をメインフォームに表示する関係になります。
複数の検索結果が出る場合に備えて、2件目以降への移動用の機能も設けます。

※技術ポイント

  • Recordset.FindFirst でのレコード検索
  • Recordset.FindNext でのカレントレコード以降の検索
  • Bookmarkプロパティを使って、二つのフォーム間の連携をする。
  • Do・・・Loop の繰り返し命令を使う

作り方

1.使用するフォーム

フォーム名:「F_名簿」

  • フォーム仕様 形式:単票形式 レコードソース:テーブル/クエリ(連結フォーム)

2.検索条件設定フォームの作成

検索条件設定フォームを新規に作ります。フォームは非連結フォームとし、余分な機能を外した仕様にします。 また検索用にテキストボックスとコマンドボタンを設置します。その仕様は次のようにします。

【フォームの仕様】

  • 名前:「F_検索条件設定」
  • 形式:非連結フォーム スクロールバー:なし レコードセレクト:いいえ 移動ボタン:いいえ 境界線スタイル:細線

【コントロールの設置】

  • テキストボックス「Txt_検索条件」 検索語を入力するところ
  • 検索実行ボタン「Btn_検索実行」 検索を実行するボタン
  • 終了ボタン「Btn_閉じる」 検索フォームを閉じるボタン
  • ※各コントロールのラベルは分かりやすい表現にします。

3.検索条件設定フォームに検索機能をつける

※DAOのレコードセットを使います。参照設定で「Microsoft DAO 3.5 Object Liblary」を使えるようにしておいてください。

【検索実行ボタンの機能】

  • クリック時イベントのプロシージャを作成します。
    (その手順)
  • デザインモードでフォームを開き、ボタン上で右クリックメニューで「イベントのビルド」をクリック、で「ビルダの選択」画面から「コードビルダ」をクリックします。
  • 表示されたVBAエディタの作成されたプロシージャに次のコードを記述します。シングルクォーテーションの文字は説明文ですので、機能には関係ありません。
Private Sub Btn_検索実行_Click()
'まず検索結果が出るフォームを表示します。
DoCmd.OpenForm "F_名簿"

'DAO型のレコードセットを使う関係の変数宣言
Dim db As DAO.Database
Dim rs As DAO.Recordset

'検索語の変数宣言
Dim Keyword As String

'メインフォームのレコードセットのコピーを作る
Set db = CurrentDb
Set rs = Forms!F_名簿.RecordsetClone

'テキストボックスの値を検索語変数に代入
Keyword = Me!Txt_検索条件

'検索語を含むあいまい検索を実行
rs.FindFirst "氏名 like '*" & Keyword & "*'"

'検索されている間は続けるループ
Do Until rs.NoMatch = True

'メインフォームのレコードを検索結果に合わせる
Forms!F_名簿.Bookmark = rs.Bookmark

'メッセージボックスでの分岐処理
If MsgBox("見つかりました。まだ検索を続けますか?", vbYesNo, "検索結果") = vbYes Then

'次を検索する場合
rs.FindNext "氏名 like '*" & Keyword & "*'"
Else
Exit Sub
End If
Loop

'見つからなかった場合のメッセージ
MsgBox "該当レコードがありません。"

'DAOのレコードセットを閉じる
rs.Close
db.Close

【閉じるボタンの機能】

  • クリック時イベントのプロシージャを作成します。
    (プロシージャは省略します)

4.メインフォームに検索用のボタン設置

メインフォームから検索条件設定フォームを開くためのコマンドボタンを設置します。

クリック時イベントのプロシージャを作成します。

(プロシージャ)

Private Sub Btn_検索フォーム_Click()
DoCmd.OpenForm "F_検索条件設定"
End Sub

5.使ってみる

機能はこれで完成。フォームビューで表示して操作し結果を確認してください。

その他の調整

付け加えた各コントロールの位置やラベルの調整は行っていません。分かりやすく使いやすい形状に仕上げてください。 テキストボックスのラベル表示は「氏名に含まれる文字を入力」とすると良いでしょう。

(この項終わり)