VBAで複数選択可能なリストボックスの選択値を取得する方法

当ページのリンクには広告が含まれています。
複数選択リストボックス
  • URLをコピーしました!

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

複数選択リストボックス
複数選択リストボックスの設定

例えば、家電の売上データの中から、必要なデータのみ抽出したい場合です。
複数選択リストボックスには以下の項目があるとします。

テレビ
ビデオ
炊飯器
洗濯機
掃除機

この中の、「テレビ」と「ビデオ」を選択し、これを条件に売上データを検索する仕組みです。

    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つの場合は等号(=)で検索するようにしています。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次