フォームにコンボボックスを作成して、そのリストから選択して一致するレコードを抽出できるようにします。
ウィザードを使い、コンボボックスの値はテーブルから取得します。
フィルターの解除ボタンも作成して、同時にコンボボックスの値も空にします。
データシートビューのフィルターボタン
Accessの分割フォームのデータシートビューには、Excelのフィルターと同じようにフィルターボタンがあり、Excelと同じように様々なデータ抽出が可能です。
既定でこの機能がついているので、とても便利です。
-
分割フォーム(単票フォームとデータシートを同時に表示)の作成と使い方
Accessでは、画面を2つに分け[単票フォーム]と[データシート]を同時に表示できる[分割フォーム]というのがあります。Access200 ...
ただ、フィルター機能は便利なのですが、空白を含むフィールドでは注意が必要です。
-
フィルターの空白を含む複数選択で抽出数が異なる
Access2007からの新機能だと思うですが、テーブルやデータシートビューでフィルターが使用できます。 Excelのフィルターと同じように ...
Accessは、一人で使用する場合は問題がなくても、共有で使用する場合は、ユーザーから次々と追加要求があります。
今回はコンボボックスから商品を抽出できるようにしてほしいという要望があったので、作成方法を記しておきます。
参考フィルターボタンをクリックしても、リストが表示されない場合があります。
これは、[Accessのオプション]の設定で変更することで解決できます。以下の記事で解説しています。
商品テーブルの確認
商品テーブルは下のようになっています。
テーブル名は、[T商品]です。
これをコンボボックスのリストにします。
参考ここでは[ドキュメントウィンドウオプション]で[ウィンドウを重ねて表示する]を選択しています。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
非連結のコンボボックスを作成
分割フォームをデザインビューで開いて、非連結のコンボボックスを作成します。
非連結とは、どのフィールドにも紐づけされていないということです。
[デザイン]タブの[コントロール]にある[コンボボックス]をクリックして、フォームの任意の位置でクリックします。
コントロールウィザードがオンになっているかを確認
今回は、コンボボックスウィザードを使用して作成します。
ウィザードが表示されない場合は、[コントロールウィザードの使用]が無効になっていると思いますので、オンにしてください。
参考コンボボックスは、ウィザードを使用しなくても作成できますが、ここではウィザードを使って作成します。
コンボボックスの値を別のテーブルまたはクエリから取得する
[コンボボックスの値を別のテーブルまたはクエリから取得する]を選択して[次へ]ボタンをクリックします。
テーブルの選択
テーブルの中から[T商品]を選択して[次へ]ボタンをクリックします。
フィールドの選択
[商品ID]と[商品]フィールドを中央の[>]ボタンをクリックして追加します。
[次へ]ボタンをクリックします。
並べ替えの指定
[商品ID]の昇順で並べるため、以下のように[商品ID]の[昇順]設定にします。
[次へ]ボタンをクリックします。
キー列を表示しない
[キー列を表示しない(推奨)]のチェックボックスはオンのまま[次へ]ボタンをクリックします。
後の作業で使用する
[後の作業で使用する]を選択して[次へ]ボタンをクリックします。
ラベルの名前付け
ラベルに付ける名前を入力します。
[完了]ボタンをクリックします。
フォームには以下のように表示されます。
[非連結]とはテーブルやクエリのデータがもとになっていないコントロールのことを指します。
コンボボックスのプロパティで設定
非連結のコンボボックスに名前を付けます。
キーボードから[F4]キーを押して、コンボボックスのプロパティを表示します。
[その他]タブの[名前]には[コンボ90](コンボ+数字)などの名前が自動で付けられていると思いますが、分かりやすい名前にします。
ここでは[商品選択コンボ]とします。
プロパティの[書式]タブです。
[列数]は[2]、[列幅]は[0cm;2.54cm]となっています。
プロパティの[データ]タブの[値集合ソース]の[...]ボタンをクリックしてクエリビルダーを表示すると、
以下のようになっているのを確認することができます。コンボボックスウィザードで設定した内容です。
[データ]タブの[連結列]を[2]に変更します。
返す値を[商品ID]ではなく、[商品]にするためです。
参考コンボボックスのプロパティの設定については、以下の記事で詳しく解説しています。
-
コンボボックスとリストボックスのカスタマイズ(プロパティの設定)
フォームにコンボボックスやリストボックスを使用すると、一覧のリストの中から選択できるようになります。 作成方法はいくつかありますが、コンボボ ...
コンボボックスの更新後処理のイベントで設定
非連結の[商品選択コンボ]という名前を付けたコンボボックスを選択したまま、プロパティの[イベント]タブにある[更新後処理]の[...]ボタンをクリックします。
[ビルダーの選択]ダイアログボックスが表示されますので、[コードビルダー]か、[マクロビルダー]で設定します。
どちらで設定してもかまいません。
参考マクロビルダーで設定すると、オブジェクトやコントロールの名前を変更した場合でも自動で修正されるメリットもあります。
初心者の方には、マクロビルダーの方が分かりやすいと思います。
[マクロビルダー]と[コードビルダー]の相違点などは以下の記事で解説しています。
-
マクロアクション(マクロビルダー)とVBA(コードビルダー)
Accessでは、マクロアクション(マクロの実行アクション)やVBA(Visual Basic for Applications)を使って一 ...
[コードビルダー]で設定
[ビルダーの選択]ダイアログボックスから[コードビルダー]を選択して、[OK]ボタンをクリックします。
イベントプロシージャの更新後処理に下のように入力します。[Me.]は省いてもかまいません。
Filter = "商品='" & 商品選択コンボ & "'"
FilterOn = True
入力するのは、赤く囲まれた箇所ですね。
設定後のプロパティには、[イベントプロシージャ]と表示されます。
[マクロビルダー]で設定
[ビルダーの選択]ダイアログボックスから[マクロビルダー]を選択して、[OK]ボタンをクリックします。
[マクロウィンドウ]が表示されます。
[新しいアクションの追加]の▼ボタンをクリックして、[フィルターの実行]を選択します。
[アクションカタログ]から選択してマクロウィンドウへ追加する方法もあります。
[フィルターの実行]の[Where条件式]に以下を入力します。入力支援ウィンドウを活用するとミスなく入力できると思います。
上書き保存して、[マクロウィンドウ]を閉じます。
設定後のプロパティには、[埋め込みマクロ]と表示されます。
フォームビューに切り替えて動作確認
フォームビューに切り替えて、コンボボックスで商品を選択してみます。
デザインビューからフォームビューに切り替えるショートカットキーは[F5]キーです。
データシートビューには、コンボボックスの商品と同じ商品のレコードが抽出されます。
参考以下の記事では、2つのコンボボックスを設置して、1つ目のコンボボックスで選択した値でレコードを絞り込んで、2つの目のコンボボックスでさらに絞り込む方法を解説しています。
-
2つのコンボボックスに重複しないデータを表示してレコードを抽出
Accessでコンボボックスを使用してレコードを抽出する方法はいくつかありますが、テーブル内の重複しないデータをコンボボックスに表示して作成 ...
コンボボックスのプロパティで[入力チェック]を[はい]に設定しておくと、リスト以外の値は入力できなくなります。
-
コンボボックスにリスト以外の値が入力されないようにするには
テーブルやフォームでコンボボックスのリストから値を選択して入力するようにしていても、プロパティの[入力チェック]を[いいえ]に設定していると ...
コンボボックス内にカーソルをおくだけで、リストを表示するようにすることもできます。
-
コンボボックス内にカーソルが移動すると自動でリストを表示するには
Accessの入力フォームでコンボボックスを使うことは多いと思います。 コンボボックスって、▼ボタンを押してリストを表示しますが、コンボボッ ...
テキストボックスの値でレコードを抽出する方法は、以下の記事で解説しています。
-
レコード検索時に該当するレコードがない場合はメッセージを表示する
フォームに検索ボックス(テキストボックス)を設置して、管理番号を入力したら該当のレコードを抽出する仕組みを作ります。 その時、検索ボックスに ...
フィールドの非表示
分割フォームのデータシートには、[商品選択]フィールドが表示されますが、これは不要なので、右クリックして[フィールドの非表示]を選択します。
参考フィールドの非表示設定は、単票フォームの操作に影響することもあります。以下の記事で解説しています。
-
分割フォームのデータシートのフィールドを非表示にする時の注意点
Accessの分割フォームでは、データシートのフィールドは簡単に非表示に設定することができます。 ですが、データシートでフィールドを非表示に ...
フィルターの解除ボタンを作成
抽出したあと、フィルターを解除するためのボタンも作成します。
[デザイン]タブの[コントロール]グループにある[ボタン]をクリックして、コンボボックスの右へ作成します。
コマンドボタンウィザードが表示されたら、[キャンセル]ボタンをクリックして閉じます。
コマンドボタンのプロパティを表示して、名前を[フィルター解除]とします。
これも、[ビルダーの選択]ダイアログボックスが表示されますので、[コードビルダー]か、[マクロビルダー]で設定します。
どちらで設定してもかまいません。
[コードビルダー]で設定
イベントプロシージャのクリック時イベントに下のように入力します。
[Me.]は省いてもかまいません。
FilterOn = False
フィルター解除時に商品選択コンボボックスの値も空白にするには、以下のように追記してください。
商品選択コンボ.Value = ""
以下は、コードビルダーで設定後の[フィルター解除]ボタンのプロパティです。
[マクロビルダー]で設定
[マクロウィンドウ]では、マクロアクションを以下のように設定します。
マクロアクション[全レコードの表示]は、下のほうにあります。
途中に[フィルター/並べ替えの解除]というマクロアクションもあります。どちらでもいいと思います。
[値の代入]は、[デザイン]タブの[表示/非表示]グループにある[すべてのアクションを表示]をオンにすると選択できるようになります。
[値の代入]の[アイテム]には、以下のように入力します。
[値の代入]の[式]には、以下のように入力します。または、Null と入力します。
""
以下は、マクロビルダーで設定後の[フィルター解除]ボタンのプロパティです。
フィルター解除ボタンの動作について
フォームビューに切り替えて、[フィルター解除]ボタンをクリックします。
フィルターが解除されます。
[担当者]フィールドから[愛野]を選択します。
[担当者]フィールドで[愛野]のレコードが抽出されます。
このフィルターを解除するときも[フィルター解除]ボタンをクリックして解除することが可能です。
関連以下のページも参考になると思います。
-
フォームのレコードをボタンをクリックして並べ替える
Accessでは、分割フォームをよく利用しています。 分割フォームは、フォームビュー(単票フォーム)とデータシートビューが同時に表示され、E ...
-
[検索と置換]ダイアログボックスをコマンドボタンで起動して検索
Accessでレコードの検索を行う場合、[検索と置換」ダイアログボックス表示して使用することは多いと思います。 この[検索と置換]ダイアログ ...
-
コンボボックス作成ウィザードを使って検索用コンボボックスを簡単作成
Accessのフォームで検索用コンボボックスを作成する方法です。 コンボボックス作成ウィザードを使って簡単に作成することができます。 この記 ...
テキストボックスを使って、部分検索で抽出する方法も解説しています。
-
テキストボックスの文字列でレコードを抽出(マクロビルダーで設定)
Accessでフォームのテキストボックスに入力した文字列でレコードを抽出する方法です。 ここでは、テーブルを基にウィザードを使って表形式のフ ...
-
テキストボックスでレコード抽出(コードビルダーを起動して設定)
Accessのフォームで検索用のテキストボックスを作成して、そのテキストボックスに入力した文字列の部分一致でレコードを抽出する方法を紹介しま ...
抽出されたレコードの件数を自動的にフォームのテキストボックスに表示することもできます。
-
重複しないデータの個数とレコードの抽出件数をテキストボックスに自動表示
Accessのフォームに重複しないデータの個数を表示する方法を紹介します。 以下のようにフォームヘッダーのテキストボックスに都道府県の重複し ...