PR

便利機能!!Accessにおける検索機能の搭載

VBA

Accessにおいてフォームを作成し、データを閲覧する機会がありますが、データ数が多くなると、検索をして必要な情報だけを表示したいというニーズが出てきます。

そこで、今回は検索ワードから必要なレコードの抽出をする機能をフォーム上に搭載してみます。

スポンサーリンク

サンプルテーブル

今回用いるサンプルテーブルには「氏名」フィールドと「年齢」フィールドを設け、それぞれ「短いテキスト」型と「整数型」として設定します。

そして、以下の表に示すサンプルデータを入力しておきます。

氏名 年齢
猿渡 銀次郎 43
佐藤 花子 22
山田 花子 32
山田 太郎 12
渡辺 権 15
鈴木 紘一 39

サンプルフォームの作成

サンプルフォームとして、「F_検索条件」フォームを作成します。

図1 検索フォームのオブジェクト配置

まず、図1に示すようにオブジェクトを追加していきます。ここで注意する点は、予めフォームヘッダーセクションと詳細セクションを表示するようにし、「氏名」及び「年齢」テキストボックスは詳細セクションに配置するようにします。セクションについては以下の記事をご参照ください。

次に、「F_検索条件」のプロパティシートを開き、以下の設定をします。

・レコードソース: SELECT [サンプルテーブル].氏名, [サンプルテーブル].年齢 FROM サンプルテーブル;
・既定のビュー: 帳票フォーム

これで、先に作成した「氏名」フィールドと「年齢」フィールドがSQLにより設定したフィールドを参照するようになります。

さらに、「検_C」コンボボックスは値リストを設定することとし、「検_C」コンボボックスのプロパティシートから以下の設定をします。

・値集合ソース: ”含む”;”含まない”
・値集合タイプ: 値リスト

以上で、フォームの配置等設定は完了しました。

次に、「cmd_検索」コマンドボタンに対して、クリックをした際に、検索テキストと、ワードを含む/含まないでのレコード抽出をするコードを実装します。

スポンサーリンク

ソースコードの追加

今回の検索方法として、氏名フィールドに対して

①検索テキストに何も書かれていなければ、全件表示する。
②検索テキストに何か記載されており、ワードを含むor含まないが「含む」となっていれば、当該ワードを含むレコードを検索する。
③検索テキストに何か記載されており、ワードを含むor含まないが「含まない」となっていれば、当該ワードを含まないレコードを検索する。

とします。この条件でVBAにおいてソースコードを実装します。
まず、「cmd_検索」コマンドボタンのプロパティシートを開き、「クリック時」に[イベントプロシージャ]を設定し、右の「…」ボタンをクリックします。

そして、次のソースコードを追加します。

Private Sub cmd_検索_Click()
If IsNull(Me.検_txt) Or Me.検_txt = "" Then
  Me.FilterOn = False
  Me.Requery
ElseIf (Not IsNull(Me.検_txt) Or Me.検_txt <> "") And Me.検_C = "含む" Then
  Me.Filter = "氏名 Like '*" & [Forms]![F_検索条件]![検_txt] & "*'"
  Me.FilterOn = True
  Me.Requery
ElseIf (Not IsNull(Me.検_txt) Or Me.検_txt <> "") And Me.検_C = "含まない" Then
  Me.Filter = "氏名 Not Like '*" & [Forms]![F_検索条件]![検_txt] & "*'"
  Me.FilterOn = True
  Me.Requery
Else
End If
End Sub

これで、全ての設定が完了です。

早速動作を確認してみましょう。

検索フォームの動作検証

作成した検索フォームの動作を確認してみましょう。まずは、フォームを起動してみます。すると、図2のように全レコードが帳票形式で表示されます。

図2 帳票形式でのレコード表示

次に、検索テキストに「山田」と、ワードを含むor含まないを「含む」と選択し、「検索開始」ボタンをクリックすると、図3に示すレコードが表示されます。

図3 検索ワードを含む場合の表示

このように、当該ワードを含むレコードだけが表示されるようになりました。次に検索テキストに「山田」と、ワードを含むor含まないを「含まない」と選択し、「検索開始」ボタンをクリックすると、図4に示すレコードが表示されます。

図4 検索ワードを含まない場合の表示

このようにして、ワードを含む/含まないでの検索をすることができました。

まとめ

今回は、フォーム上にレコードを検索するための機能を実装しました。一つのフィールドに対する実装方法は、今回紹介した方法で十分に機能を果たしますが、例えば複数条件での検索の場合は、条件に応じてAND/OR文で繋ぐ等の設定が必要であり、また、SQL文を使う方法も考えられますので、機会がありましたら作成にチャレンジしてみてください。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました