VBA7行でリストボックスで複数行選択して別々のセルに表示させる
ユーザーフォームのリストボックスの設定を変更して複数行を選択できるようにしたら、選択状態のリスト(項目)をセルに表示(記載)したいと思いませんか?
それも1つのセルにまとめて改行して表示したり、別々のセルに表示させたり。
繰り返し処理と入力済み最終行(列)のVBAコードを使って、たった7行のVBAコードで完成できます。
複数行選択状態と選択された行の項目を取得する
最初に、まだリストボックス複数行選択できるように設定をしていない場合は、この方法が使えないので設定変更を先に行ってください。
設定方法については下記をご覧くださいませ。
複数行選択状態を取得するSelectedプロパティ
まず最初にリストボックスの選択されたリスト(項目)が、選択状態になっているかどうかを判別しなくてはいけません。
調べる方法としてSelectedプロパティを使用し、調べたいリスト(項目)を行番号で指定して、選択状態ならば「True」、選択されていない状態ならば「False」を返してくれます。
リストボックスでは先頭行番号は「0」から始まりますので見た目からは「-1」です。
行番号 | Selected(選択状態) |
Selected(0) | False |
Selected(1) | True |
Selected(2) | False |
Selected(3) | False |
Selected(4) | False |
Selected(5) | False |
Selected(6) | True |
Selected(7) | False |
Selected(8) | False |
Selected(9) | True |
複数行選択された行を項目に置き換える
上の図・表のようにSelectedプロパティで選択状態になっている「1・6・9」の行番号が取得できたら、番号ではなくリスト(項目)の名称でなければ意味がありません。
そこでSelectedプロパティで取得した行番号をListプロパティを使用して、項目名に置き換えましょう。
行番号 | 項目 |
List(1) | 北斗展望台 |
List(6) | 塘路サルルン展望台 |
List(9) | 細岡展望台 |
これで基本的な選択状態を判別する事と、リスト番号からリスト(項目)名に置き換える方法で、リスト2番目を1つ選択している状態をセルA1に記載するには下記のようになります。
これが基本形で、これをベースに下記を追加してリストボックスで複数行選択して別々のセルに表示させるようにします。
- リスト(項目)の最初から最後までを繰り返し選択状態を調べる
- 選択状態の項目を入力済み最終列のセルに別々に表示・記載する
複数選択した項目を入力済み最終列に別々に表示・記載する
たった7行で完成しますので、基本的なVBAコードでできるようになります。
ここでは、リストボックスに表示された複数行を選択したリスト(項目)を、1行目の入力済み最終列の右側のセルに別々に表示・記載するようにします。
例:セルB1が入力済み最終列ならば、最初に選択した項目がセルC1に、2つ目に選択した項目がセルD1、3つ目に選択した項目がセルE1に記載されるという事です。
これで、3つ選択した項目がそれぞれ別々のセルに左から順番に記載できます。
選択して複数行転記ボタン押すと・・・
このように同じ行に記載できるようになると、顧客管理や商品管理などで1つの行に複数の項目を記載する時に便利になりますね。