検索時や入力時に、ユーザーに既存のデータを選択してもらうことは非常に
多く、その場合にコンボボックスを使用することも多いでしょう。
しかし、選択項目が多い場合はコンボボックスで1つのデータを探し、選択す
るのは思った以上に大変な作業です。
そこで今回は、複数のコンボボックスを使った絞込処理によってデータ選択
を簡単にする方法を説明します。
● 準備 ●
(1) 以下の構成で[商品マスタ]テーブルを作成します。
----------------------------------------
フィールド名 データ型
商品ID オートナンバー(主キー)
商品区分 テキスト型
取扱区分 テキスト型
割引有無 テキスト型
商品名 テキスト型
販売価格 通貨型
----------------------------------------
(2) 新規に非連結のフォーム[絞込テスト]を作成する
(3) 前記のフォーム上にコンボボックス[コンボ1]〜[コンボ4]を配置する。
(4) 前記のフォーム上にテキストボックス[テキスト1]〜[テキスト6]を配置する。
(5) コマンドボタン[コマンド1]を配置する。
(6) [コマンド1]のOnClick/クリック時イベントに、以下の(● サンプル ●)
プロシージャを記述する。
(7) 各コンボボックスのプロパティを以下のように設定する
---------------------------------------------------------------------
コンボ名 値集合ソース
コンボ1 Select Distinct 商品区分 From 商品マスタ Order By 商品区分
コンボ2 Select 商品区分, 取扱区分 From 商品マスタ Order By 商品区分
Group By 取扱区分
コンボ3 SELECT 商品区分, 取扱区分, 割引有無 FROM 商品マスタ
GROUP BY 商品区分, 取扱区分, 割引有無
HAVING (商品区分)=[Forms]![絞り込みテスト]![コンボ1])
AND (取扱区分=[Forms]![絞り込みテスト]![コンボ2]);
コンボ4 SELECT 商品ID, 商品区分, 取扱区分, 割引有無, 商品名
FROM 商品マスタ
WHERE (商品区分)=[Forms]![絞り込みテスト]![コンボ1])
And (取扱区分=[Forms]![絞り込みテスト]![コンボ2])
And (割引有無)=[Forms]![絞り込みテスト]![コンボ3]);
---------------------------------------------------------------------
コンボ名 列数 列幅 値連結
コンボ1 1 2cm 1
コンボ2 2 0cm;2cm 2
コンボ3 3 0cm;0cm;2cm 3
コンボ4 5 0cm;0cm;0cm;0cm;2cm 5
---------------------------------------------------------------------
(8) コンボボックス[コンボ4]のAfterUpdate/更新後イベントに以下のプロシー
ジャを記述します。
● サンプル ●
Private Sub コンボ4_AfterUpdate()
'初期処理
Dim i As Integer
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("商品マスタ", dbOpenDynaset)
'検索
Rst.FindFirst "[商品ID] = " & Me.コンボ4.Column(0) & ""
Me.テキスト1 = Rst![商品ID]
Me.テキスト2 = Rst![商品区分]
Me.テキスト3 = Rst![取扱区分]
Me.テキスト4 = Rst![割引有無]
Me.テキスト5 = Rst![商品名]
Me.テキスト6 = Rst![販売価格]
'コンボボックスのクリア
For i = 1 To 4
Me.Controls("コンボ" & i) = ""
Next
'終了処理
Me.Refresh
Rst.Close
Set Rst = Nothing
End Sub
● 動作確認 ●
フォームビューに変更し、コンボ1から順番に値を選択していってください。
コンボ4(商品名)を選択した後、テキストボックスにコンボボックスで選択し
たものと同じ値が入っていることを確認して下さい。
● 詳細 ●
サンプルでは、コンボボックスのRowSource/値集合ソース内に直接SQL文を書
き込むことでドロップダウンした際の値を設定しています。
複数のColumn(列)をどのように取得するのか、表示するものしないものをど
のように設定するのか、どのColumn(列)を値連結させてフィールドのデータと
するのか、といったことが処理のポイントです。
今回は非常に少ない数でのテストのため、それほど大きなメリットを感じる
ことは無いと思いますが、選択するデータの数が多くなった時には、その効果は
かなり大きなものになるはずです。
|