コンボボックスの連携 (mm0706)

リストボックスやコンボボックスの連携について説明します


(1) リストボックスとコンボボックス


(2) コンボボックスの連携とは

コンボボックス1 が変更されたとき、コンボボックス2 のリスト内容を コンボボックス1 の選択内容によって自動的に変更すること


(3) コンボボックス連携の作成手順(RowSource方式)

例えばコンボボックス1 で[書籍]を選択するとコンボボックス2 に [文庫][専門書][図鑑]が表示されるようにします

  1. ワークシートSheet3 にリストを準備します
    	      A          B          C          D          E
    	1
    	2  文房具                バインダ   文庫       マウス
    	3  書籍                  色鉛筆     専門書     ディスプレイ
    	4  OA機器                筆箱       図鑑       コンピュータ
    	5                        ボールペン            USBメモリ
    	6                                              キーボード
    
    • Excel2007:[開発]タブ → [コード]グループ → [Visual Basic] → VBEの世界に入ります
    • Excel2003:[ツール]メニュー → [マクロ(M)]→[Visual Basic Editor] → VBEの世界に入ります
  2. VBEの世界で[挿入(I)]メニュー → [ユーザーフォーム(U)] で UserForm1 を作成します
  3. VBEの世界で ツールボックス にあるコンボボックスをフォーム上にドラッグしてComboBox1 を作成します
  4. VBEの世界で ツールボックス にあるコンボボックスをフォーム上にドラッグしてComboBox2 を作成します
  5. VBEの世界で[挿入(I)]メニュー → [標準モジュール] を選択。 画面の右側に Module(コード) を表示させ、下のコードを貼り付けます
        Sub USFormShow()
            ' ユーザーフォームの表示
            UserForm1.show
        End Sub
    
  6. UserForm1 上でダブルクリックして UserForm1(コード) を表示します
  7. UserForm1(コード)に下のコードを貼り付けます
    (青い部分はVBEが自動的に作った部分です)
    
        Option Explicit
    
        Private Sub UserForm1_Click()
        
        End Sub
        
        Private Sub ComboBox1_Change()
            ' ComboBox1 が変化した時の処理
            Dim si As Integer
            With UserForm1
                .ComboBox2.Text = ""
                si = .ComboBox1.ListIndex   ' ComboBox1 の何番目が選択されたかを得る
                Select Case si
                    Case 0
                        ' 0番が選択されていたらComboBox2 の内容をC列から作成する
                        .ComboBox2.RowSource = "Sheet3!C2:C6"
                    Case 1
                        ' 1番が選択されていたらComboBox2 の内容をD列から作成する
                        .ComboBox2.RowSource = "Sheet3!D2:D6"
                    Case 2
                        ' 2番が選択されていたらComboBox2 の内容をE列から作成する
                        .ComboBox2.RowSource = "Sheet3!E2:E6"
                End Select
            End With
        End Sub
    
        Private Sub ComboBox2_Change()
            ' ComboBox2 が変化した時の処理
            With UserForm1
                If .ComboBox2.Text <> "" Then
                    MsgBox .ComboBox1.Text & " " & .ComboBox2.Text
                End If
            End With
        End Sub
    
        Private Sub UserForm_Activate()
            ' ComboBox がアクティブの時の処理
            With UserForm1
                .ComboBox1.RowSource = "Sheet3!A2:A6"
                .ComboBox2.RowSource = "Sheet3!C2:C6"
            End With
        End Sub
    
    • Excel2007: [開発]タブ → [コード]グループ → [マクロ] → USFormShowを選択します
    • Excel2003:ワークシート側から[ツール(T)]メニュー → [マクロ(M)] → [マクロ(M)] → USFormShowを選択します

(4) 上↑のVBAコードの解説補足

 Sub ComboBox1_Change()
   コンボボックス1 が変化したとき、選択された内容に従って、
   コンボボックス2 のリストの内容をセットアップし直します。
 
 Sub ComboBox2_Change()
   ここはMsgBoxで表示させているだけです、不要なら削除してOK です。
 
 Sub UserForm_Activate()
   ここはコンボボックス1 のリストの内容をセットアップして、
   コンボボックス2 のリストの内容を仮にセットアップしています。

参考ページ


コンボボックスを制御する RowSource 以外の方法

コンボボックスを制御するには AddItem を使った方法もありますが今回は省略しました


Excel2007の[開発]タブを表示させる

  1. ワークシート側から[Office]ボタン → [Excel のオプション(I)]
  2. [基本設定] → [Excelの使用に関する基本オプション]→[開発タブをリボンに表示する]にチェックを入れる
  3. [開発]タブが表示されます

2022/01/16:更新 2004/07/06:登録 訪問者: Valid HTML 4.01 Transitional