今回は、検索条件として指定する値が、マルチセレクト(複数選択可能)リストボックスの選択値である場合を例に説明します。

例えば、家電の売上データの中から、必要なデータのみ抽出したい場合です。
複数選択リストボックスには以下の項目があるとします。
1 | テレビ |
2 | ビデオ |
3 | 炊飯器 |
4 | 洗濯機 |
5 | 掃除機 |
この中の、「テレビ」と「ビデオ」を選択し、これを条件に売上データを検索する仕組みです。
Dim strCriteria as string '条件文字列
Dim cnt as integer 'カウンタ
Dim strsql as string 'SELECT SQL文
'文字列初期化
strCriteria = ""
'フォームの複数選択コントロール
With Me.lst家電
'全行ループ
For cnt = 0 To .ListCount - 1
'選択されていたら、選択値を文字列にセット
If .Selected(cnt) Then
'条件文字列が空白でなければ、前にすでに条件があるためカンマ(,)で結合
If strCriteria <> "" Then
strCriteria = strCriteria & ","
End If
'条件文字列に選択値をセット
strCriteria = strCriteria & .ItemData(cnt)
End If
Next cnt
End With
'SELECT句を作成
strsql = "SELECT * FROM 売上データ"
'選択文字列が空白でなければ・・・
If strCriteria <> "" Then
'作成された検索条件にカンマがあるかどうか確認
'カンマがなければ1つ指定なので、等号で条件に設定
If InStr(strCriteria, ",") = 0 Then
strsql = strsql & " WHERE 家電=" & strCriteria
'カンマがあるなら複数指定なので、IN句で条件を指定
Else
strsql = strsql & " WHERE 家電 IN (" & strCriteria & ")"
End If
End If
このプログラムで、「テレビ」と「ビデオ」を選択した場合、以下のSQL文が作成されます。
SELECT * FROM ●● WHERE 家電 IN (1, 2)
「炊飯器」のみを選択した場合は、以下のSQL文が作成されます。
SELECT * FROM ●● WHERE 家電 = 3
作成したSQL文をサブフォームやリストボックスのレコードソースに使えば、条件に合致するデータを一覧表示できます。
検索条件が1つにも関わらずIN句を使用するのは検索効率が悪そうなので、検索条件が1つの場合は等号(=)で検索するようにしています。
コメント