Accessにおいてフォームを作成し、データを閲覧する機会がありますが、データ数が多くなると、検索をして必要な情報だけを表示したいというニーズが出てきます。
そこで、今回は検索ワードから必要なレコードの抽出をする機能をフォーム上に搭載してみます。
サンプルテーブル
今回用いるサンプルテーブルには「氏名」フィールドと「年齢」フィールドを設け、それぞれ「短いテキスト」型と「整数型」として設定します。
そして、以下の表に示すサンプルデータを入力しておきます。
氏名 | 年齢 |
猿渡 銀次郎 | 43 |
佐藤 花子 | 22 |
山田 花子 | 32 |
山田 太郎 | 12 |
渡辺 権 | 15 |
鈴木 紘一 | 39 |
サンプルフォームの作成
サンプルフォームとして、「F_検索条件」フォームを作成します。
まず、図1に示すようにオブジェクトを追加していきます。ここで注意する点は、予めフォームヘッダーセクションと詳細セクションを表示するようにし、「氏名」及び「年齢」テキストボックスは詳細セクションに配置するようにします。セクションについては以下の記事をご参照ください。
次に、「F_検索条件」のプロパティシートを開き、以下の設定をします。
・レコードソース: SELECT [サンプルテーブル].氏名, [サンプルテーブル].年齢 FROM サンプルテーブル;
・既定のビュー: 帳票フォーム
これで、先に作成した「氏名」フィールドと「年齢」フィールドがSQLにより設定したフィールドを参照するようになります。
さらに、「検_C」コンボボックスは値リストを設定することとし、「検_C」コンボボックスのプロパティシートから以下の設定をします。
・値集合ソース: ”含む”;”含まない”
・値集合タイプ: 値リスト
以上で、フォームの配置等設定は完了しました。
次に、「cmd_検索」コマンドボタンに対して、クリックをした際に、検索テキストと、ワードを含む/含まないでのレコード抽出をするコードを実装します。
ソースコードの追加
今回の検索方法として、氏名フィールドに対して
①検索テキストに何も書かれていなければ、全件表示する。
②検索テキストに何か記載されており、ワードを含むor含まないが「含む」となっていれば、当該ワードを含むレコードを検索する。
③検索テキストに何か記載されており、ワードを含むor含まないが「含まない」となっていれば、当該ワードを含まないレコードを検索する。
とします。この条件でVBAにおいてソースコードを実装します。
まず、「cmd_検索」コマンドボタンのプロパティシートを開き、「クリック時」に[イベントプロシージャ]を設定し、右の「…」ボタンをクリックします。
そして、次のソースコードを追加します。
Private Sub cmd_検索_Click() If IsNull(Me.検_txt) Or Me.検_txt = "" ThenMe.FilterOn = False
Me.Requery
ElseIf (Not IsNull(Me.検_txt) Or Me.検_txt <> "") And Me.検_C = "含む" ThenMe.Filter = "氏名 Like '*" & [Forms]![F_検索条件]![検_txt] & "*'"
Me.FilterOn = True
Me.Requery
ElseIf (Not IsNull(Me.検_txt) Or Me.検_txt <> "") And Me.検_C = "含まない" ThenMe.Filter = "氏名 Not Like '*" & [Forms]![F_検索条件]![検_txt] & "*'"
Me.FilterOn = True
Me.Requery
Else End If End Sub
これで、全ての設定が完了です。
早速動作を確認してみましょう。
検索フォームの動作検証
作成した検索フォームの動作を確認してみましょう。まずは、フォームを起動してみます。すると、図2のように全レコードが帳票形式で表示されます。
次に、検索テキストに「山田」と、ワードを含むor含まないを「含む」と選択し、「検索開始」ボタンをクリックすると、図3に示すレコードが表示されます。
このように、当該ワードを含むレコードだけが表示されるようになりました。次に検索テキストに「山田」と、ワードを含むor含まないを「含まない」と選択し、「検索開始」ボタンをクリックすると、図4に示すレコードが表示されます。
このようにして、ワードを含む/含まないでの検索をすることができました。
まとめ
今回は、フォーム上にレコードを検索するための機能を実装しました。一つのフィールドに対する実装方法は、今回紹介した方法で十分に機能を果たしますが、例えば複数条件での検索の場合は、条件に応じてAND/OR文で繋ぐ等の設定が必要であり、また、SQL文を使う方法も考えられますので、機会がありましたら作成にチャレンジしてみてください。
スポンサーリンク
コメント