Google検索

リンクユニット

Windows8 & Office2013 Access2013

コンボボックスに重複しないデータを表示して絞り込み

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

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

また、ここでは、[部署コンボ]には、フォームの[会社名]で絞り込んだ値を表示します。

テーブルの確認

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

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

テーブル

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

コンボボックス

クエリの作成

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

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

queryの作成

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

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

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

ショートカットメニュー

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

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

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

プロパティシート

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

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

クエリは[Q_会社名]として保存します。

クエリの実行

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

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

SQLビューから

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

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

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

SQLビューの選択

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

表示ボタンから切り替え

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

[DISTINCT]は半角です。

SQLビュー

フォームの作成

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

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

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

分割フォームの作成

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

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

コンボボックスの作成

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

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

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

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

会社名コンボ

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

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

部署コンボ

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

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

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

クエリの編集

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

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

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

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

[会社名コンボ]の更新後処理に、[DoCmd.Requery "部署コンボ"]と入力すると動作しますが、以下のフィルタリングの処理と一緒に入力します。

更新後処理

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

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

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

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

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

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

Dim kaisha As String
kaisha = Me.会社名コンボ

Me.Filter = "[会社名]='" & kaisha & "'"
Me.FilterOn = True

DoCmd.Requery "部署コンボ"

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

Dim busyo As String
kaisha = Me.会社名コンボ
busyo = Me.部署コンボ

Me.Filter = "[会社名]='" & kaisha & "'" & "and[部署]='" & busyo & "'"

Me.FilterOn = True

フォームビューに切り替えて、絞り込んだ値のみが表示されることを確認します。

フォームビューで確認

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

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

ボタンを作成して、クリック時イベントに下のように書くといいです。

Me.FilterOn = False

詳細は、コンボボックスでレコードの抽出のページを参照してください。

フィルター解除ボタン

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

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

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

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

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

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

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

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

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

続きを見る

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

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

入力フォームなどで、よく絞り込みは使いますね。 たとえば、営業部を選択すると、営業部の人の名前だけを表示、総務部を選択すると、総務部の人の名 ...

続きを見る

おすすめ記事と広告

-Windows8 & Office2013 Access2013

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

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