Accessのフォームで検索用のテキストボックスを作成して、そのテキストボックスに入力した文字列の部分一致でレコードを抽出する方法を紹介します。
ここでは、コードビルダーを起動して、VBAコードを記述して設定する方法を紹介します。
参考ここでは、オブジェクトの表示は[ウィンドウを重ねて表示]の設定にしています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。従来からAccessを使用している方に ...
テーブルの確認
下のようなテーブルがあります。テーブル名は[T_商品]です。
デザインビューは以下のようになっています。
分割フォームの作成
このテーブルを元に分割フォームを作成します。
テーブルを選択した状態で、[作成]タブにある[フォーム]グループの[その他のフォーム]から[分割フォーム]をクリックします。
フォームはレイアウトビューで表示されますので、コントロールの大きさなどを調整しておきます。
デザインビューに切り替えて調整しても構いません。以下の画像はデザインビューです。
フォームビューに切り替えると、下のようなフォームが完成します。
この分割フォームは、上がレコードの単票、下がデータシートになっていて、とても便利です。
検索や並べ替えもExcelのフィルターと同じように操作できます。
個人で使う場合は、これだけでも十分な機能を備えてると思うのですが。
やはり共有で使用する場合は、このフィルターの使い方に慣れていない方もいるので考慮しないといけません。
参考分割フォームの作成については、以下の記事で解説しています。
-
分割フォーム(単票フォームとデータシートを同時に表示)の作成と使い方
Accessでは、画面を2つに分け[単票フォーム]と[データシート]を同時に表示できる[分割フォーム]というのがあります。Access200 ...
また、レコード数が多いとフィルターボタンをクリックしても、リストが表示されない場合があります。
これは、[Accessのオプション]の設定で変更すると解決できます。以下の記事で解説しています。
検索用テキストボックスの作成
そこで、商品名を簡単に検索したり、抽出できるようにするために検索用のテキストボックスを作成して、入力したテキストから部分一致検索ができるようにしたいと思います。
フォームをデザインビューで開いて、非連結のテキストボックスを1つ作成します。
[デザイン]タブのコントロールにある[テキストボックス]をクリックして、[詳細]エリアにドラッグします。
[テキストボックスウィザード]が表示されたら、[キャンセル]ボタンをクリックします。
ウィザードの方が分かりやすい場合は、そのまま次へ進んで完成させても構いません。
ラベルとテキストボックスに名前付け
非連結のテキストボックスを選択した状態で、[デザイン]タブの[プロパティシート]をクリックしてプロパティを表示させます。
[その他]タブで[名前]を[検索]とします。
ラベルの標題は[商品名検索]にします。
ラベルの標題は、プロパティからでもいいですし、ラベルを選択して、そのまま入力してかまいません。
検索ボタンの作成
そして、テキストボックスの横に[検索]ボタンを作成します。
[デザイン]タブの[ボタン]をクリックして[詳細]エリアのテキストボックスの横でドラッグしてボタンを作成します。
ウィザードが表示されたら、[キャンセル]ボタンをクリックて閉じます。
コマンドボタンを選択して、プロパティシートの[書式]タブで[標題]を[検索]にします。
そして、[その他]タブを選択して[名前]を[検索ボタン]などに変更します。
ビルダーの選択
今度は[イベント]タブをクリックして、[クリック時]の[ビルダー選択]ボタン[…]をクリックします。
[ビルダーの選択]ダイアログボックスでは、以下の3つの選択肢があります。
- マクロビルダー
- 式ビルダ
- コードビルダー
[コードビルダー]を起動して設定する方法を紹介します。
参考ここで[マクロビルダー]を選択して設定する方法は、以下の記事で解説しています。埋め込みマクロの設定になります。コードが苦手な方は、埋め込みマクロの方が分かりやすいと思います。
ここで使用しているデータベースと同じものを使って解説しています。
また、検索テキストボックスが空白のまま検索ボタンをクリックすると、メッセージを表示してキーワードを入力するように促す方法も解説しています。
-
テキストボックスの文字列でレコードを抽出(埋め込みマクロで設定)
Accessでフォームのテキストボックスに入力した文字列でレコードを抽出する方法です。 ここでは、テーブルを基にウィザードを使って表形式のフ ...
コードビルダーを起動して[VBA]で設定
[ビルダーの選択]ダイアログボックスが表示されたら、[コードビルダー]を選択して[OK]ボタンをクリックします。
下のように書き込みます。
[検索]はテキストボックスの名前になります。
Like演算子を使用してあいまい検索をします。
Me.Filter = "商品名 like'*" & 検索 & "*'"
Me.FilterOn = True
テキスト型の条件
主なテキスト型の条件の記述方法です。文字列の指定は["](ダブルクォーテーション)で囲みます。
記述例 | 意味 |
"●" | 完全一致 |
Not "●" | 一致しない |
Like "●*" | 指定した文字列から始まる |
Not Like "●*" | 指定した文字列で始まらない |
Like "*●*" | 指定した文字列を含む |
Not Like "*●*" | 指定した文字列を含まない |
Like "*●" | 指定した文字列で終わる |
Not Like "*●" | 指定した文字列で終わらない |
クエリの抽出条件の例 - Access(Microsoft)
検索ボタンをクリックしてレコード抽出を確認
フォームビューに切り替えて、検索してみます。
テキストボックスに文字を入力して、[検索]ボタンをクリックすると、下のように商品名の一部に検索文字を含む商品名が抽出されます。
参考抽出したレコードの件数をテキストボックスに自動的に表示することもできます。
-
重複しないデータの個数とレコードの抽出件数を自動表示
Accessのフォームに重複しないデータの個数を表示する方法を紹介します。 下のようにフォームヘッダーのテキストに部署数の重複しない個数を表 ...
フィールドの非表示
分割フォームのデータシートに[商品名検索]フィールドは不要なので、右クリックしてショートカットメニューから[フィールドの非表示]をクリックして非表示にしておきます。
参考フィールドの非表示設定は、単票フォームの操作に影響することもあります。以下の記事で解説しています。
-
分割フォームのデータシートのフィールドを非表示にする時の注意点
Accessの分割フォームでは、データシートのフィールドは簡単に非表示に設定することができます。 ですが、データシートでフィールドを非表示に ...
フィルター解除ボタンの作成
また、レコードの抽出を解除するためのボタンも設置しておくと便利です。
別のボタンを1つ作成して、検索ボタンの横に設置します。
そして、クリック時のイベントに下のように書き込みます。
Me.FilterOn = False
イベントプロシージャは下のようになります。
参考[解除]ボタンを押した時に、検索テキストボックスの中を空にしたい場合は、以下のように記述してください。
Me.FilterOn = False
Me.検索.Value = ""
後は、フォームヘッダーでタイトル名を変更したり、ボタンの位置などを調整して完成させて、フォームに名前を付けて保存します。
[F12]キーを押すと[名前を付けて保存]ダイアログボックスを表示できます。
フォームヘッダーのロゴの挿入方法などは、以下の記事で解説しています。
-
フォームヘッダー/フッターの表示(タイトル・ロゴ・日付と時刻の挿入)
Access2013のフォームで[フォームのヘッダー/フッター]を表示する方法です。 フォームをデザインビューで開くと、以下のようになってい ...
関連コンボボックスから抽出する方法は、以下の記事で解説しています。
-
コンボボックスでレコードの抽出
Accessの分割フォームのデータシートビューには、Excelのフィルターと同じようにフィルターボタンがあり、Excelの操作と同じように様 ...
抽出ではなく、検索だけでよければ以下の記事を参照してください。ウィザードで簡単に作成できます。
-
ウィザードを使って検索用コンボボックスを簡単作成
Accessのフォームで検索用コンボボックスを作成する方法です。 コンボボックス作成ウィザードを使って簡単に作成することができます。 テーブ ...
-
検索と置換ダイアログボックスをボタンで起動
Accessでレコードの検索を行う場合、[検索と置換」ダイアログボックス表示して使用することは多いと思います。 この[検索と置換]ダイアログ ...