Windows 8 & Office 2013 Access 2013

2つのコンボボックスに重複しないデータを表示してレコードを抽出

投稿日:2017年1月7日 更新日:

Accessでコンボボックスを使用してレコードを抽出する方法はいくつかありますが、テーブル内の重複しないデータをコンボボックスに表示して作成する方法です。

また、ここでは[会社名]と[部署]のコンボボックスがあり、[部署]には、フォームの[会社名]で絞り込んだ値を表示してレコードを抽出します。

各コンボボックスの更新後処理イベントでフィルター処理を行いますが、マクロビルダーとコードビルダーのどちらかで設定します。

Accessコンボボックス

テーブルの確認

下のようなテーブルがあります。

[T_担当一覧]テーブルとしています。

テーブル

[会社名]コンボボックスに[会社名]の重複しないリスト一覧が表示されるよう設定します。

コンボボックス

2つのクエリを作成

まず、2個のクエリを作成します。

[作成]タブの[クエリ]グループにある[クエリデザイン]をクリックします。

[作成]タブの[クエリ]グループにある[クエリデザイン]

[テーブルの表示]ダイアログボックスから、テーブル[T_担当一覧]を選択して[追加]ボタンをクリックします。

[テーブルの表示]ダイアログボックス

参考バージョンによって異なると思いますが、[作成]タブの[クエリデザイン]をクリックすると、Microsoft 365のAccessとAccess 2021では[テーブルの追加]作業ウィンドウとして表示されます。

クエリデザインの「テーブルの追加」は作業ウィンドウに表示される

デザイングリッドにフィールドを登録

テーブル[T_担当一覧]を表示して、フィールド[会社名]をデザイングリッドへドラッグします。

queryの作成

参考[会社名]テーブルなどマスターテーブルがある場合は、そのテーブルを利用してください。また、その場合は[固有の値]の設定をする必要はありません。

クエリプロパティの[固有の値]を[はい]に

クエリで右クリックして、ショートカットメニューから[プロパティ]をクリックします。

[F4]キーを押しても、プロパティを表示できます。[F4]キーでプロパティの表示/非表示を切り替えることができます。

ショートカットメニュー

必ず[クエリプロパティ]になっているかを確認します。

[クエリプロパティ]になっていない場合([フィールドリストプロパティ]になっている)は、クエリの何もないところでダブルクリックしてみてください。

クエリプロパティの[固有の値]を[はい]にします。

プロパティシート

クエリを実行してみます。

[デザイン]タブの[結果]グループの[表示]、または[実行]ボタンをクリックします。

[デザイン]タブの[表示]と[実行]ボタン

会社名の重複しないデータが表示されます。

確認したら、クエリは[Q_会社名]として保存します。

クエリの実行

同じように[部署]も重複しないデータが表示されるクエリを作成します。

クエリ[Q_部署]の作成

クエリは[Q_部署]として保存します。

ナビゲーションウィンドウには、[Q_会社名]と[Q_部署]の2つのクエリが保存されています。

クエリ[Q_会社名]と[Q_部署]

SQLビューから設定

また、このクエリの作り方は、SQLビューを表示して[DISTINCT]を入力してもいいです。

クエリプロパティの[固有の値]を[はい]にするか、[SQLビューで入力する]か、どちらかを設定してください。

SQLビューは、クエリを右クリックして[SQLビュー]をクリックします。

SQLビューの選択

または、表示ボタンから切り替えます。

表示ボタンから切り替え

SELECTの後に[半角スペース][DISTINCT][半角スペース]を入力します。

[DISTINCT]は半角です。

SQLビュー

参考クエリデザインのフォントサイズを大きくすると見やすくなります。

クエリデザインとデータシートビューのフォントサイズを変更

Accessのクエリデザインとデータシートビューのフォントサイズを変更する方法です。 大きく表示したいと思う方も多いのではないでしょうか?オ ...

続きを見る

フォームの作成

クエリの準備ができたら、フォームを作成します。

[T_担当一覧]テーブルを基に分割フォームを作成します。

フォーム名は、[F_担当一覧]とします。

分割フォームの作成

非連結のコンボボックスを2個作成します。

非連結のコンボボックスを作成

参考分割フォームの作成については、以下の記事で詳細に解説しています。

分割フォーム(単票フォームとデータシートを同時に表示)の作成と使い方

Accessでは、画面を2つに分け[単票フォーム]と[データシート]を同時に表示できる[分割フォーム]というのがあります。Access200 ...

続きを見る

コンボボックスの作成

分割フォームを作成したときに、自動的にラベルとテキストボックスが並びますが、全てのコントロールを移動させて非連結のコンボボックスを設置できるスペースを作ります。

[非連結]とはテーブルやクエリのデータがもとになっていないコントロールのことです。

コンボボックスは、ウィザードを使用してもいいですが、テキストボックスを作成した後、右クリックのショートカットメニューから[コントロールの種類の変更]をポイントして[コンボボックス]をクリックしてもいいです。

コントロールの種類の変更

コンボボックスは、[会社名コンボ]と[部署コンボ]という名前を付けます。

プロパティの[その他]タブの[名前]に入力します。

プロパティの[その他]タブの[名前]に入力

参考非連結のコンボボックスの作成は、以下の記事を参考にしてください。

フォームのコンボボックスの値でレコードを抽出

Accessの分割フォームのデータシートビューには、Excelのフィルターと同じようにフィルターボタンがあり、Excelの操作と同じように様 ...

続きを見る

会社名コンボ

[会社名コンボ]のプロパティを表示して、値集合ソースに[Q_会社名]を指定します。

値集合ソースに[Q_会社名]を指定

部署コンボ

また、[部署コンボ]には、フォームの[会社名]で絞り込んだ値を表示したいので、[Q_部署]クエリを下のように編集します。

[会社名]フィールドの抽出条件に以下のように入力します。

[Forms]![F_担当一覧]![会社名コンボ]

クエリの編集

コンボボックス[部署コンボ]の値集合ソースには、[Q_部署]を指定します。

値集合ソースには、[Q_部署]を指定

コンボボックス[部署コンボ]のプロパティ[書式]タブです。[列数]は、[1]としています。

コンボボックス[部署コンボ]のプロパティ[書式]タブ

注意ここでフォームビューに切り替えても、[会社名コンボ]と[部署コンボ]の絞り込みは上手く動作しません。

[部署コンボ]の再クエリが必要になります。

コンボボックスの更新後処理でフィルター設定

フォームのコンボボックスの設定はできたので、このコンボボックスで抽出できるように設定します。

[会社名コンボ]と[部署コンボ]のプロパティ[更新後処理]で設定します。

[ビルダーの選択]ダイアログボックスで[マクロビルダー]か[コードビルダー]のどちらかを選択して設定します。

マクロビルダーのほうが初心者向きだと思います。

[ビルダーの選択]ダイアログボックス

参考マクロビルダーとコードビルダーの違いについては、以下の記事で解説しています。

[マクロビルダー]と[コードビルダー]を使う場合に気をつけること

Accessでは、マクロアクション(マクロの実行アクション)やVBA(Visual Basic for Applications)を使って一 ...

続きを見る

マクロビルダーで設定

コンボボックス[会社名コンボ]を選択して、プロパティの[イベント]タブにある[更新後処理]の[ビルダー選択]ボタン[…]をクリックします。

プロパティの[イベント]タブにある[更新後処理]の[ビルダー選択]ボタン

[ビルダーの選択]ダイアログボックスで[マクロビルダー]を選択して[OK]ボタンをクリックします。

[ビルダーの選択]ダイアログボックスで[マクロビルダー]を選択

[新しいアクションの追加]の▼ボタンをクリックして、マクロアクションの一覧から[フィルターの設定]を選択します。

マクロアクションの一覧から[フィルターの設定]を選択

マクロアクション[フィルターの設定]の[Where条件式]のテキストボックスに以下のように入力します。

入力途中に補助メニューも表示されると思いますので、活用してください。ミスの軽減に繋がります。

[会社名]=[Forms]![F_担当一覧]![会社名コンボ]

マクロアクション[フィルターの設定]の[Where条件式]に入力

続けて、下の[新しいアクションの追加]でマクロアクション[再クエリ]を選択します。

マクロアクション[再クエリ]を選択

マクロアクション[再クエリ]の[コントロール名]のテキストボックスに以下を入力します。

[部署コンボ]

入力が終わったら、[上書き保存]ボタンをクリックしてマクロビルダーを閉じます。

マクロアクション[再クエリ]の[コントロール名]

設定後、[会社名コンボ]のプロパティ[更新後処理]には、[埋め込みマクロ]と表示されます。

[会社名コンボ]のプロパティ[更新後処理]

コンボボックス[部署]も[更新後処理]で設定します。

[ビルダーの選択]ダイアログボックスで[マクロビルダー]を選択します。

マクロアクション[フィルターの設定]を選択して、[Where条件式]に以下のように入力します。

[And]の前後には、半角スペースを入力します。入力しなくても自動で挿入されるようですが、念のため気をつけてください。

[会社名]=[Forms]![F_担当一覧]![会社名コンボ] And [部署]=[Forms]![F_担当一覧]![部署コンボ]

入力が終わったら、[上書き保存]ボタンをクリックしてマクロビルダーを閉じます。

マクロアクション[フィルターの設定]を選択して[Where条件式]に入力

コードビルダーで設定

[ビルダーの選択]ダイアログボックスで[コードビルダー]を選択して設定します。

[ビルダーの選択]ダイアログボックスで[コードビルダー]を選択

[会社名コンボ]の[更新後処理]で以下のように書き込みます。

[部署コンボ]の再クエリも忘れないように入力します。

[部署]コンボの[更新後処理]では、[会社名]と[部署]の複数条件でフィルタリングします。

更新後処理のイベントプロシージャ

設定後のプロパティには、[イベントプロシージャ]と表示されます。

会社名コンボの更新後処理のイベントプロシージャには、以下のように入力します。

[会社名]と[部署]はフィールド名、[会社名コンボ]と[部署コンボ]はコンボボックスの名前です。

Me.Filter = "会社名='" & 会社名コンボ & "'"
Me.FilterOn = True

DoCmd.Requery "部署コンボ"

部署コンボの更新後処理のイベントプロシージャには、以下のように入力します。

Me.Filter = "会社名='" & 会社名コンボ & "'" & " and 部署='" & 部署コンボ & "'"
Me.FilterOn = True

設定後のコンボボックスで確認

マクロビルダー、またはコードビルダーで設定後、フォームビューに切り替えて、[部署]コンボボックスには[会社名]コンボボックスで選択した値のみが表示されることを確認します。

フォームビューでコンボボックスの動作を確認

[フィルター解除]ボタンの設置

[フィルター解除]ボタンも設置するといいかもしれません。

コマンドボタンを1つ作成します。

コマンドボタンの作成

これも、マクロビルダーか、コードビルダーのどちらかを選択して設定します。

フィルターを解除して、[会社名コンボ]と[部署コンボ]を空白にします。

マクロビルダーで設定

コマンドボタンのクリック時イベントで設定します。

コマンドボタンのクリック時イベント

[新しいアクションの追加]の▼ボタンをクリックして、マクロアクション[フィルター/並べ替えの解除]を選択します。

または、マクロアクション[全レコードの表示]を選択します。どちらを選択してもかまいません。

マクロアクション[フィルター/並べ替えの解除]を選択

[デザイン]タブの[表示/非表示]グループにある[すべてのアクションを表示]ボタンをクリックします。

マクロアクションの一覧から[値の代入]を選択します。一番下までスクロールすると見つかります。

マクロアクションの一覧から[値の代入]を選択

マクロアクション[値の代入]の[アイテム]にはコンボ名を入力します。

[会社名コンボ]

[式]には、以下を入力します。

Null

マクロアクション[値の代入]

続けて、同じマクロアクション[値の代入]を選択して、[アイテム]を以下のようにします。[式]は同じです。

[部署コンボ]

入力が終わったら、上書き保存してマクロビルダーは閉じます。

マクロアクション[値の代入]

コードビルダーで設定

ボタンを選択して、クリック時イベントに以下のように入力します。

フィルターを解除して[会社名コンボ]と[部署コンボ]を空白にします。

コマンドボタンのコードビルダー

Me.FilterOn = False
Me.会社名コンボ = Null
Me.部署コンボ = Null

コンボボックスでレコードの抽出のページでも解説しています。

フィルター解除ボタン

分割フォームの下方にあるデータシートには、非連結の[会社名]と[部署]フィールドが表示されますが、非表示にしておくといいと思います。

右クリックのショートカットメニューから設定できます。

フィールドの非表示設定

また、以下のように2つの[コンボボックス]と、[フィルター解除]ボタンを[フォームヘッダー]へ移動させるのもいいと思います。

フォームヘッダー/フッターの表示(タイトル・ロゴ・日付と時刻の挿入)

Access2013のフォームで[フォームのヘッダー/フッター]を表示する方法です。 フォームをデザインビューで開くと、以下のようになってい ...

続きを見る

分割フォームは、単票とデータシートを一緒に表示できるものです。Access2007以降であれば使用できます。

フォームヘッダーにコンボボックスを移動した分割フォーム

分割フォームを作成する - Access(Microsoft)

分割フォーム(単票フォームとデータシートを同時に表示)の作成と使い方

Accessでは、画面を2つに分け[単票フォーム]と[データシート]を同時に表示できる[分割フォーム]というのがあります。Access200 ...

続きを見る

関連重複しないデータの個数を求める方法も解説しています。

重複しないデータの個数とレコードの抽出件数を自動表示

Accessのフォームに重複しないデータの個数を表示する方法を紹介します。 下のようにフォームヘッダーのテキストボックスに部署数の重複しない ...

続きを見る

コンボボックスの絞り込みについては、以下の記事も参考になると思います。

コンボボックスの絞り込み

入力フォームなどで、コンボボックスの絞り込みはよく使いますね。2つのコンボボックスが連結して動作します。 たとえば、1つ目のコンボボックスで ...

続きを見る

コンボボックス内にカーソルをおくだけで、リストを表示するようにもできます。

コンボボックス内にカーソルが移動すると自動でリストを表示するには

Accessの入力フォームでコンボボックスを使うことは多いと思います。 コンボボックスって、▼ボタンを押してリストを表示しますが、コンボボッ ...

続きを見る

検索

ほかの記事も検索してみませんか?

Profile

執筆者/はま

-Windows 8 & Office 2013 Access 2013

Copyright © 2001-2022 初心者のためのOffice講座 All Rights Reserved.

Copyright© 初心者のためのOffice講座 , 2022 AllRights Reserved Powered by AFFINGER4.