連動するリスト 2番めのリストで対応するデータを探す
Excel2016,2013マクロ 40回
2番めのリストの選択項目によるデータ抽出
リストボックス2のテキストに応じて、テキストボックスに対応するデータを表示するようにします。
今回は、Do~Loopステートメントを使って、データのあるシートから目的のデータを見つけ、対応する列のデータをフォームのテキストボックスに取得します。
(サンプルファイルは、こちらから
マクロ40回サンプルデータ)
リストボックスの値によってテキストボックスが変わる
今度は残る二つのテキストボックスの表示を設定します。テキストボックス1とテキストボックス2に入れるデータをリストボックス2の選択によって表示するようにします。
ListBox2の上で右クリックして、コードの表示を選択するか、ダブルクリックでコードを表示します。
ListBoxコントロールオブジェクトのイベントコードが表示されます。
Private Sub ListBox2_Change() End Sub
Private Sub ListBox2_Change() End Sub
探すデータは、Sheet2にあります。ListBox2にはB列のデータのどれかが表示されているので、そのデータを見つけて、隣のC列とD列のデータをテキストボックスに表示させるようにしたいわけです
間に、次のようなコードを記述します。
Do~Loopステートメントには、条件を指定する方法としてWhile と Untilを使用する方法がありますが、ここではDo~Loop Untilを使います。
コードの 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からアイテムを選択すると、
ListBox2のデータアイテムが表示されます。
さらにListBox2でアイテムを選択すると、対応するデータを探して、テキストボックス1とテキストボックス2に表示します。