Accessでコンボボックスを使用してレコードを抽出する方法はいくつかありますが、テーブル内の重複しないデータをコンボボックスに表示して作成する方法を紹介します。
また、ここでは[会社名]と[部署]のコンボボックスがあり、[部署]にはフォームの[会社名]で絞り込んだ値を表示してレコードを抽出します。
各コンボボックスの更新後処理イベントでフィルター処理を行いますが、マクロビルダーとコードビルダーのどちらかで設定します。
また、[フィルター解除]ボタンを設置して、フィルターの解除とコンボボックスの値を空にします。
参考ここでのウィンドウの表示は[ウィンドウを重ねて表示する]の設定にしています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
この記事の目次
テーブルの確認
下のようなテーブルがあります。
[T_担当一覧]テーブルとしています。
[会社名]コンボボックスに[会社名]の重複しないリスト一覧が表示されるよう設定し、[部署]コンボボックスには[会社名]コンボボックスで抽出されたレコードの[部署]のみが表示されるようにします。
2つのコンボボックスの値でレコードを抽出します。
2個のクエリを作成
まず、2個のクエリを作成します。
[会社名]の重複しないデータを表示するクエリ[Q_会社名]と、[部署]の重複しないデータを表示するクエリ[Q_部署]を作成します。
[会社名]クエリの作成
[作成]タブの[クエリ]グループにある[クエリデザイン]をクリックします。
[テーブルの表示]ダイアログボックスから、テーブル[T_担当一覧]を選択して[追加]ボタンをクリックします。
参考バージョンによって異なると思いますが、[作成]タブの[クエリデザイン]をクリックすると、Microsoft 365のAccessとAccess 2021では[テーブルの追加]作業ウィンドウとして表示されます。
クエリデザインの「テーブルの追加」は作業ウィンドウに表示される
デザイングリッドにフィールドを登録
テーブル[T_担当一覧]を表示して、フィールド[会社名]をデザイングリッドへドラッグします。
参考[会社名]テーブルなどマスターテーブルがある場合は、そのテーブルを利用してください。また、その場合は[固有の値]の設定をする必要はありません。
クエリプロパティの[固有の値]を[はい]に
クエリで右クリックして、ショートカットメニューから[プロパティ]をクリックします。
キーボードから[F4]キーを押しても、プロパティを表示できます。[F4]キーでプロパティの表示/非表示を切り替えることができます。
必ず[クエリプロパティ]になっているかを確認します。
[クエリプロパティ]になっていない場合([フィールドリストプロパティ]になっている)は、クエリの何もないところでダブルクリックしてみてください。
クエリプロパティの[固有の値]を[はい]にします。
クエリを実行してみます。
[デザイン]タブの[結果]グループの[表示]、または[実行]ボタンをクリックします。
会社名の重複しないレコードが表示されます。
確認したら、クエリは[Q_会社名]として保存します。
[部署]のクエリ作成
同じように[部署]も重複しないデータが表示されるクエリを作成します。
クエリは[Q_部署]として保存します。
ナビゲーションウィンドウには、[Q_会社名]と[Q_部署]の2つのクエリが保存されています。
参考クエリでグループ化して、重複しないレコードを抽出することもできます。
-
グループ化で重複レコードを削除したテーブルを作成
Accessで、1つのテーブルで重複したレコードを削除してマスターテーブルを作成する方法です。 クエリでグループ化を設定して重複レコードがな ...
SQLビューから設定するには
また、このクエリの作り方は、SQLビューを表示して[DISTINCT]を入力してもいいです。
クエリプロパティの[固有の値]を[はい]にするか、[SQLビューで入力する]か、どちらかを設定してください。
SQLビューは、クエリを右クリックして[SQLビュー]をクリックします。
または、表示ボタンから切り替えます。
SELECTの後に[半角スペース][DISTINCT][半角スペース]を入力します。
[DISTINCT]は半角です。
参考クエリデザインのフォントサイズを大きくすると見やすくなります。
以下は、フォントを14ptにしています。
-
クエリデザインとデータシートビューのフォントサイズを変更
Accessのクエリデザインとデータシートビューのフォントサイズを変更する方法です。 大きく表示したいと思う方も多いのではないでしょうか?オ ...
Microsoft 365のAccessのSQLビューは、インテリセンス機能が強化されています。
帳票フォームの作成
クエリの準備ができたら、フォームを作成します。
[T_担当一覧]テーブルを基に帳票フォームを作成します。
テーブル[T_担当一覧]を選択して、[作成]タブの[フォーム]グループにある[その他のフォーム]-[複数のアイテム]をクリックします。
フォーム名は、[F_担当一覧]とします。
作成したフォームのプロパティを見ると、[書式]タブの[既定のビュー]は[帳票フォーム]になっていると思います。
キーボードから[F4]キーを押すと、プロパティを表示できます。[選択の種類]が[フォーム]になっていることを確認します。
フォームのコントロールの大きさなどは、任意で設定してください。
参考フォームヘッダーが表示されていない場合は、右クリックしてショートカットメニューから[フォームヘッダー/フッター]をクリックすると表示できます。
-
フォームヘッダー/フッターの表示(タイトル・ロゴ・日付と時刻の挿入)
Access2013のフォームで[フォームのヘッダー/フッター]を表示する方法です。 フォームをデザインビューで開くと、以下のようになってい ...
コンボボックスの作成
フォームヘッダーに非連結のコンボボックスを2個作成します。
[非連結]とはテーブルやクエリのデータがもとになっていないコントロールのことです。
コントロールから[コンボボックス]を選択して挿入します。
[コンボボックスウィザード]が表示されたら、[キャンセル]ボタンをクリックします。
コンボボックスは、[会社名コンボ]と[部署コンボ]という名前を付けます。
プロパティの[その他]タブの[名前]に入力します。
ラベルの名前も変更します。
参考非連結のコンボボックスをウィザードで作成する方法は、以下の記事で解説しています。
-
フォームのコンボボックスの値でレコードを抽出
フォームにコンボボックスを作成して、そのリストから選択して一致するレコードを抽出できるようにします。 ウィザードを使い、コンボボックスの値は ...
コンボボックスは、ウィザードを使用してもいいですが、テキストボックスを作成した後、右クリックのショートカットメニューから[コントロールの種類の変更]をポイントして[コンボボックス]をクリックしても作成できます。
会社名コンボ
[会社名コンボ]のプロパティを表示して、値集合ソースに[Q_会社名]を指定します。
部署コンボ
また、[部署コンボ]には、フォームの[会社名]で絞り込んだ値を表示したいので、[Q_部署]クエリを下のように編集します。
[会社名]フィールドの抽出条件に以下のように入力します。
コンボボックス[部署コンボ]の値集合ソースには、[Q_部署]を指定します。
コンボボックス[部署コンボ]のプロパティ[書式]タブです。[列数]は、[1]としています。
注意ここでフォームビューに切り替えても、[会社名コンボ]と[部署コンボ]の絞り込みは上手く動作しません。
[部署コンボ]の再クエリが必要になります。
コンボボックスの更新後処理でフィルター設定
フォームのコンボボックスの設定はできたので、このコンボボックスで抽出できるように設定します。
[会社名コンボ]と[部署コンボ]のプロパティ[更新後処理]で設定します。
[ビルダーの選択]ダイアログボックスで[マクロビルダー]か[コードビルダー]のどちらかを選択して設定します。
マクロビルダーのほうが初心者向きだと思います。
参考マクロビルダーとコードビルダーの違いについては、以下の記事で解説しています。
-
マクロアクション(マクロビルダー)とVBA(コードビルダー)
Accessでは、マクロアクション(マクロの実行アクション)やVBA(Visual Basic for Applications)を使って一 ...
マクロビルダーで設定
コンボボックス[会社名コンボ]を選択して、プロパティの[イベント]タブにある[更新後処理]の[ビルダー選択]ボタン[…]をクリックします。
[ビルダーの選択]ダイアログボックスで[マクロビルダー]を選択して[OK]ボタンをクリックします。
[新しいアクションの追加]の▼ボタンをクリックして、マクロアクションの一覧から[フィルターの設定]を選択します。
[アクションカタログ]から選択してマクロウィンドウへ追加する方法もあります。
マクロアクション[フィルターの設定]の[Where条件式]のテキストボックスに以下のように入力します。
入力途中に補助メニューも表示されると思いますので、活用してください。ミスの軽減に繋がります。
続けて、下の[新しいアクションの追加]でマクロアクション[再クエリ]を選択します。
マクロアクション[再クエリ]の[コントロール名]のテキストボックスに以下を入力します。
入力が終わったら、[上書き保存]ボタンをクリックしてマクロビルダーを閉じます。
設定後、[会社名コンボ]のプロパティ[更新後処理]には、[埋め込みマクロ]と表示されます。
コンボボックス[部署]も[更新後処理]で設定します。
[ビルダーの選択]ダイアログボックスで[マクロビルダー]を選択します。
マクロアクション[フィルターの設定]を選択して、[Where条件式]に以下のように入力します。
[And]の前後には、半角スペースを入力します。入力しなくても自動で挿入されるようですが、念のため気をつけてください。
入力が終わったら、[上書き保存]ボタンをクリックしてマクロビルダーを閉じます。
コードビルダーで設定
[ビルダーの選択]ダイアログボックスで[コードビルダー]を選択して設定します。
[会社名コンボ]の[更新後処理]で以下のように書き込みます。
[部署コンボ]の再クエリも忘れないように入力します。
[部署]コンボの[更新後処理]では、[会社名]と[部署]の複数条件でフィルタリングします。
設定後のプロパティには、[イベントプロシージャ]と表示されます。
会社名コンボの更新後処理のイベントプロシージャには、以下のように入力します。
[会社名]と[部署]はフィールド名、[会社名コンボ]と[部署コンボ]はコンボボックスの名前です。
Me.Filter = "会社名='" & 会社名コンボ & "'"
Me.FilterOn = True
DoCmd.Requery "部署コンボ"
部署コンボの更新後処理のイベントプロシージャには、以下のように入力します。
Me.Filter = "会社名='" & 会社名コンボ & "'" & " and 部署='" & 部署コンボ & "'"
Me.FilterOn = True
設定後のコンボボックスで確認
マクロビルダー、またはコードビルダーで設定後、フォームビューに切り替えて、[部署]コンボボックスには[会社名]コンボボックスで選択した値のみが表示されることを確認します。
[フィルター解除]ボタンの設置
[フィルター解除]ボタンも設置するといいと思います。
コマンドボタンを1つ作成します。
この場合も[コマンドボタンウィザード]が表示されたら[キャンセル]をクリックして閉じます。
これも、マクロビルダーか、コードビルダーのどちらかを選択して設定します。
フィルターを解除して、[会社名コンボ]と[部署コンボ]を空白にします。
マクロビルダーで設定
コマンドボタンのクリック時イベントで設定します。
[新しいアクションの追加]の▼ボタンをクリックして、マクロアクション[フィルター/並べ替えの解除]を選択します。
または、マクロアクション[全レコードの表示]を選択します。どちらを選択してもかまいません。
[アクションカタログ]から選択してマクロウィンドウへ追加する方法もあります。
[デザイン]タブの[表示/非表示]グループにある[すべてのアクションを表示]ボタンをクリックします。
マクロアクションの一覧から[値の代入]を選択します。一番下までスクロールすると見つかります。
マクロアクション[値の代入]の[アイテム]にはコンボ名を入力します。
[式]には、以下を入力します。
Null
続けて、同じマクロアクション[値の代入]を選択して、[アイテム]を以下のようにします。[式]は同じ[Null]です。
入力が終わったら、上書き保存してマクロビルダーは閉じます。
コードビルダーで設定
ボタンを選択して、クリック時イベントに以下のように入力します。
フィルターを解除して[会社名コンボ]と[部署コンボ]を空白にします。
Me.FilterOn = False
Me.会社名コンボ = Null
Me.部署コンボ = Null
コンボボックスでレコードの抽出のページでも解説しています。
また、分割フォームで作成するのもいいと思います。
分割フォームは、単票とデータシートを一緒に表示できるものです。Access2007以降であれば使用できます。
分割フォームを作成する - Microsoft サポート(Microsoft)
-
分割フォーム(単票フォームとデータシートを同時に表示)の作成と使い方
Accessでは、画面を2つに分け[単票フォーム]と[データシート]を同時に表示できる[分割フォーム]というのがあります。Access200 ...
関連重複しないデータの個数を求める方法も解説しています。
-
重複しないデータの個数とレコードの抽出件数をテキストボックスに自動表示
Accessのフォームに重複しないデータの個数を表示する方法を紹介します。 下のようにフォームヘッダーのテキストボックスに部署数の重複しない ...
コンボボックスの絞り込みについては、以下の記事も参考になると思います。
-
コンボボックスの絞り込み
入力フォームなどで、コンボボックスの絞り込みはよく使いますね。2つのコンボボックスが連結して動作します。 たとえば、1つ目のコンボボックスで ...
コンボボックス内にカーソルをおくだけで、リストを表示するようにもできます。
-
コンボボックス内にカーソルが移動すると自動でリストを表示するには
Accessの入力フォームでコンボボックスを使うことは多いと思います。 コンボボックスって、▼ボタンを押してリストを表示しますが、コンボボッ ...