便利じゃなければプログラムじゃ無い!
仕事が楽になって業務効率がUPするシステムを提供!

コンボボックスの絞り込みと重複した値をまとめて表示する方法について

2014/1/30 (木) • Excel, VBA

title
今回のエントリーはExcelでコンボボックスのリストの値を絞り込んで表示する方法についてアップしたいと思います。
関連エントリーのセルのドロップダウンリストに重複した値を集計してセットするVBAコードもご参考下さい。

以下のような複数の条件で絞り込みをして、尚且つ重複した値を表示させないケースを想定した場合、何通りかの対策が考えられますが今回は前回紹介したExcelをテーブルと見なして検索する方法を取りたいと思います。

140130_2

尚、ADOを使ってExcelを開く方法については前回の記事をご参考下さい。

1.都道府県のコンボボックスの値をセット

通常、都道府県の場合は不要な処理ですが今回はあえてExcelの表から取得しています。
コンボボックスにカーソルがきた際に以下のコードを作成します。

Private Sub cmb都道府県_Enter()
    Dim adoCON      As New ADODB.Connection
    Dim adoRS       As New ADODB.Recordset
    Dim strSQL      As String
    Dim odbdDB      As Variant

    'コンボボックスをクリアする
    Me!cmb都道府県.Clear
    
    'カレントディレクトリのデータベースパスを取得
    odbdDB = ActiveWorkbook.Path & "\sample_140130.xlsm"
    
    'データベースに接続する
    Set adoCON = New ADODB.Connection

    With adoCON
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .Properties("Extended Properties") = "Excel 8.0"
        .Open odbdDB
    End With
    
    'カーソルをクライアント側に設定
    adoRS.CursorLocation = adUseClient
    
    'SQLを設定
    strSQL = "SELECT 都道府県 FROM [Sheet1$] "
    strSQL = strSQL & "GROUP BY 都道府県;"
    
    'レコードセットを開く
    adoRS.Open strSQL, adoCON, adOpenDynamic
    
    Do Until adoRS.EOF
        'コンボボックスに追加
        Me!cmb都道府県.AddItem adoRS.Fields(0).Value
        adoRS.MoveNext
    Loop
 
    'クローズ処理
    adoRS.Close
    Set adoRS = Nothing
    adoCON.Close
    Set adoCON = Nothing
End Sub

コードの解説

基本は前回のコードを踏襲していますので詳しい内容は省かせて頂きます。
違いは26~27行目のSQLで都道府県の値をグループ化して重複した値をまとめて表示するようにしています。

'SQLを設定
strSQL = "SELECT 都道府県 FROM [Sheet1$] "
strSQL = strSQL & "GROUP BY 都道府県;"

2.市区町村のコンボボックスの値をセット

市区町村のコンボボックスにカーソルがきた際に以下のコードを作成します。

Private Sub cmb市区町村_Enter()
    Dim adoCON      As New ADODB.Connection
    Dim adoRS       As New ADODB.Recordset
    Dim strSQL      As String
    Dim odbdDB      As Variant

    'コンボボックスをクリアする
    Me!cmb市区町村.Clear

    'カレントディレクトリのデータベースパスを取得
    odbdDB = ActiveWorkbook.Path & "\sample_140130.xlsm"
    
    'データベースに接続する
    Set adoCON = New ADODB.Connection

    With adoCON
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .Properties("Extended Properties") = "Excel 8.0"
        .Open odbdDB
    End With
    
    'カーソルをクライアント側に設定
    adoRS.CursorLocation = adUseClient
    
    'SQLを設定
    strSQL = "SELECT 市区町村 FROM [Sheet1$] "
    strSQL = strSQL & "WHERE 都道府県 = '" & Me!cmb都道府県 & "' "
    strSQL = strSQL & "GROUP BY 市区町村;"
    
    'レコードセットを開く
    adoRS.Open strSQL, adoCON, adOpenDynamic
    
    Do Until adoRS.EOF
        'コンボボックスに追加
        Me!cmb市区町村.AddItem adoRS.Fields(0).Value
        adoRS.MoveNext
    Loop
 
    'クローズ処理
    adoRS.Close
    Set adoRS = Nothing
    adoCON.Close
    Set adoCON = Nothing

End Sub

コードの解説

コンボボックス都道府県とほぼ同様に基本的なコードに変わりはありません。
SQLのWHERE条件にコンボボックス都道府県の値を指定し、市区町村の値をグループ化して重複を防ぎます(26~28行目)

strSQL = "SELECT 市区町村 FROM [Sheet1$] "
strSQL = strSQL & "WHERE 都道府県 = '" & Me!cmb都道府県 & "' "
strSQL = strSQL & "GROUP BY 市区町村;"

3.町域名のコンボボックスの値をセット

上記のコンボボックスとほぼ同様で先ほどのSQLのWHERE条件にコンボボックス市区町村の値を追加し、町域名でグループ化します。
コードは省略させていただきますので詳しくはサンプルファイルをダウンロードしてご覧ください。

strSQL = "SELECT 町域名 FROM [Sheet1$] "
strSQL = strSQL & "WHERE 都道府県 = '" & Me!cmb都道府県 & "' "
strSQL = strSQL & "AND 市区町村 = '" & Me!cmb市区町村 & "' "
strSQL = strSQL & "GROUP BY 町域名;"

検索関連エントリー

以上、今回はExcelでコンボボックスの絞り込みと重複した値をまとめて表示する為のVBAコードでした。

今回のサンプルファイルは以下のリンクからダウンロード可能です。

タグ
, , ,

Comments are closed.