Windows 8 & Office 2013 Access 2013

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

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

Accessの分割フォームのデータシートビューには、Excelのフィルターと同じようにフィルターボタンがあり、Excelの操作と同じように様々な抽出が可能です。

既定でこの機能がついているので、とても便利です。

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

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

続きを見る

ただ、フィルター機能は便利なのですが、空白を含むフィールドでは注意が必要です。

フィルターの空白を含む複数選択で抽出数が異なる

Access2007からの新機能だと思うですが、テーブルやデータシートビューでフィルターが使用できます。 Excelのフィルターと同じように ...

続きを見る

分割フォームのフィルターボタン

Accessは、一人で使用する場合は問題がなくても、共有で使用する場合は、ユーザーから次々と追加要求があります。

今回はコンボボックスから商品を抽出できるようにしてほしいという要望があったので、作成方法を記しておきます。

コンボボックスで抽出

参考フィルターボタンをクリックしても、リストが表示されない場合があります。

Accessでフィルターボタンをクリックしてもリストが表示されない

これは、[Accessのオプション]の設定で変更することで解決できます。以下の記事で解説しています。

フィルターボタンをクリックしてもリストが表示されない場合

商品テーブルの確認

商品テーブルは下のようになっています。

テーブル名は、[T商品]です。

これをコンボボックスのリストにします。

商品テーブル

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

分割フォームをデザインビューで開いて、非連結のコンボボックスを作成します。

非連結とは、どのフィールドにも紐づけされていないということです。

[デザイン]タブの[コントロール]にある[コンボボックス]をクリックして、フォームの任意の位置でクリックします。

[デザイン]タブの[コンボボックス]コントロール

コントロールウィザードがオンになっているかを確認

今回は、コンボボックスウィザードを使用して作成します。

ウィザードが表示されない場合は、[コントロールウィザードの使用]が無効になっていると思いますので、オンにしてください。

参考コンボボックスは、ウィザードを使用しなくても作成できます。

コントロールウィザードの使用

コンボボックスの値を別のテーブルまたはクエリから取得する

[コンボボックスの値を別のテーブルまたはクエリから取得する]を選択して[次へ]ボタンをクリックします。

コンボボックスウィザードで[コンボボックスの値を別のテーブルまたはクエリから取得する]を選択

テーブルの選択

テーブルの中から[T商品]を選択して[次へ]ボタンをクリックします。

コンボボックスウィザードでテーブル[T商品]を選択

フィールドの選択

[商品ID]と[商品]フィールドを中央の[>]ボタンをクリックして追加します。

[次へ]ボタンをクリックします。

[コンボボックスウィザード]で[商品ID]と[商品]フィールドを追加

並べ替えの指定

[商品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条件式]に以下を入力します。入力支援ウィンドウを活用するとミスなく入力できると思います。

[商品]=[Forms]![F売上]![商品選択コンボ]

上書き保存して、[マクロウィンドウ]を閉じます。

[フィルターの実行]の[Where条件式]に入力後保存

設定後のプロパティには、[埋め込みマクロ]と表示されます。

設定後のプロパティ[更新後処理]

フォームビューに切り替えて動作確認

フォームビューに切り替えて、コンボボックスで商品を選択してみます。

デザインビューからフォームビューに切り替えるショートカットキーは[F5]キーです。

キーボード[F5]キー

データシートビューには、コンボボックスの商品が抽出されます。

コンボボックスでレコードを抽出

参考以下の記事では、2つのコンボボックスを設置して、1つ目のコンボボックスで選択した値でレコードを絞り込んで、2つの目のコンボボックスでさらに絞り込む方法を解説しています。

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

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

続きを見る

コンボボックスのプロパティで[入力チェック]を[はい]に設定しておくと、リスト以外の値は入力できなくなります。

コンボボックスにリスト以外の値が入力されないようにするには

テーブルやフォームでコンボボックスのリストから値を選択して入力するようにしていても、プロパティの[入力チェック]を[いいえ]に設定していると ...

続きを見る

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

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

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

続きを見る

テキストボックスの値でレコードを抽出する方法は、以下の記事で解説しています。

レコード検索時に該当するレコードがない場合はメッセージを表示する

フォームに検索ボックス(テキストボックス)を設置して、管理番号を入力したら該当のレコードを抽出する仕組みを作ります。 その時、検索ボックスに ...

続きを見る

フィールドの非表示

分割フォームのデータシートには、[商品選択]フィールドが表示されますが、これは不要なので、右クリックして[フィールドの非表示]を選択します。

ショートカットメニューの[フィールドの非表示]

参考フィールドの非表示設定は、単票フォームの操作に影響することもあります。以下の記事で解説しています。

分割フォームのデータシートのフィールドを非表示にする時の注意点

Accessの分割フォームでは、データシートのフィールドは簡単に非表示に設定することができます。 ですが、データシートでフィールドを非表示に ...

続きを見る

フィルターの解除ボタンを作成

抽出したあと、フィルターを解除するためのボタンも作成します。

[デザイン]タブの[ボタン]をクリックして作成します。

コマンドボタンウィザードが表示されたら、[キャンセル]ボタンをクリックして閉じます。

コマンドボタンのプロパティを表示して、名前を[フィルター解除]とします。

これも、[ビルダーの選択]ダイアログボックスが表示されますので、[コードビルダー]か、[マクロビルダー]で設定します。

どちらで設定してもかまいません。

[コードビルダー]で設定

イベントプロシージャのクリック時イベントに下のように入力します。

[Me.]は省いてもかまいません。

FilterOn = False

フィルター解除時に商品選択コンボボックスの値も空白にしたいのであれば、以下のように追記してください。

商品選択コンボ.Value = ""

フィルター解除ボタンのイベントプロシージャ

[マクロビルダー]で設定

[マクロウィンドウ]では、マクロアクションを以下のように設定します。

[マクロウィンドウ]のマクロアクション

マクロアクション[全レコードの表示]は、下のほうにあります。

途中に[フィルター/並べ替えの解除]というのもあります。どちらでもいいと思います。

[新しいアクションの追加]から[全レコードの表示]を選択

[値の代入]は、[デザイン]タブの[表示/非表示]グループにある[すべてのアクションを表示]をオンにすると選択できるようになります。

[新しいアクションの追加]から[値の代入]を選択

[値の代入]の[アイテム]には、以下のように入力します。

[商品選択コンボ]

[値の代入]の[式]には、以下のように入力します。または、Null と入力します。

""

フィルター解除ボタンの動作について

フォームビューに切り替えて、[フィルター解除]ボタンをクリックします。

フィルターが解除されます。

フィルター解除ボタン

[フィルター解除]ボタンは、分割フォームの[データシートビュー]でフィルターボタンを使用して抽出したレコードも解除されます。

[担当者]フィールドから[愛野]を選択します。

データシートのフィルターボタンで[担当者]を抽出

[担当者]フィールドで[愛野]のレコードが抽出されます。

このフィルターを解除するときも[フィルター解除]ボタンをクリックして解除することが可能です。

フィルター解除

関連以下のページも参考になると思います。

フォームのレコードをボタンをクリックして並べ替える

Accessでは、分割フォームをよく利用しています。 分割フォームは、フォームビュー(単票フォーム)とデータシートビューが同時に表示され、E ...

続きを見る

[検索と置換]ダイアログボックスをコマンドボタンで起動して検索

Accessでレコードの検索を行う場合、[検索と置換」ダイアログボックス表示して使用することは多いと思います。 この[検索と置換]ダイアログ ...

続きを見る

コンボボックス作成ウィザードを使って検索用コンボボックスを簡単作成

Accessのフォームで検索用コンボボックスを作成する方法です。 コンボボックス作成ウィザードを使って簡単に作成することができます。 テーブ ...

続きを見る

テキストボックスを使って、部分検索で抽出する方法も解説しています。

テキストボックスの文字列でレコードを抽出(マクロビルダーで設定)

Accessでフォームのテキストボックスに入力した文字列でレコードを抽出する方法です。 ここでは、テーブルを基にウィザードを使って表形式のフ ...

続きを見る

テキストボックスでレコード抽出(コードビルダーを起動して設定)

Accessのフォームで検索用のテキストボックスを作成して、そのテキストボックスに入力した文字列の部分一致でレコードを抽出する方法を紹介しま ...

続きを見る

抽出されたレコードの件数を自動的にフォームのテキストボックスに表示することもできます。

重複しないデータの個数とレコードの抽出件数をテキストボックスに自動表示

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

続きを見る

検索

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

Access / Excel / PowerPoint / Word

Profile

執筆者/はま

-Windows 8 & Office 2013 Access 2013

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

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