連動するリストの2番めのリストで対応するデータを探す マクロ講座

連動するリスト 2番めのリストで対応するデータを探す

2番めのリストで対応するデータを探す
2番めのリストで対応するデータを探す

Excel2016,2013マクロ 40回

2番めのリストの選択項目によるデータ抽出

リストボックス2のテキストに応じて、テキストボックスに対応するデータを表示するようにします。
今回は、Do~Loopステートメントを使って、データのあるシートから目的のデータを見つけ、対応する列のデータをフォームのテキストボックスに取得します。

(サンプルファイルは、こちらから マクロ40回サンプルデータ

リストボックスの値によってテキストボックスが変わる

今度は残る二つのテキストボックスの表示を設定します。テキストボックス1とテキストボックス2に入れるデータをリストボックス2の選択によって表示するようにします。
2番めのリストで対応するデータを探すマクロ1
ListBox2の上で右クリックして、コードの表示を選択するか、ダブルクリックでコードを表示します。
2番めのリストで対応するデータを探すマクロ6
ListBoxコントロールオブジェクトのイベントコードが表示されます。
Private Sub ListBox2_Change() End Sub
2番めのリストで対応するデータを探すマクロ2
探すデータは、Sheet2にあります。ListBox2にはB列のデータのどれかが表示されているので、そのデータを見つけて、隣のC列とD列のデータをテキストボックスに表示させるようにしたいわけです
2番めのリストで対応するデータを探すマクロ7
間に、次のようなコードを記述します。
2番めのリストで対応するデータを探すマクロ3
Do~Loopステートメントには、条件を指定する方法としてWhile と Untilを使用する方法がありますが、ここではDo~Loop Untilを使います。
2番めのリストで対応するデータを探すマクロ7
コードの 3行目 TextBox1.Text = ""は、テキストボックス1の値をクリアしています。コードの 7行目「ListBox2.Text = Worksheets("Sheet2").Cells(行, 2)になるまでループしなさい。」という意味になります。
Private Sub ListBox2_Change()
    Dim 行  As Integer
    行 = 1
    TextBox1.Text = ""
    Do
        行 = 行 + 1
    Loop Until ListBox2.Text = Worksheets("Sheet2").Cells(行, 2)
    TextBox1.Text = Worksheets("Sheet2").Cells(行, 3)
    TextBox2.Text = Worksheets("Sheet2").Cells(行, 4)
End Sub

2番めのリストに対応するデータを表示

フォームを起動して確認します。ListBox1からアイテムを選択すると、
2番めのリストで対応するデータを探すマクロ4
ListBox2のデータアイテムが表示されます。
2番めのリストで対応するデータを探すマクロ5
さらにListBox2でアイテムを選択すると、対応するデータを探して、テキストボックス1とテキストボックス2に表示します。
2番めのリストで対応するデータを探すマクロ8