#10_3 リストボックス
多くの選択肢を並べるリスト
複数の選択肢を縦にリスト化し、複数の項目をリストの中から選択できるという機能を、ただ1つのコントロールで実現するのがリストボックスです。項目数が多い場合には、スクロールバーが自動的に表示されるのも特長です。
ちなみにプロパティの設定によって、1つの項目しか選択できないスタイル(オプションボタン的)と、複数の項目を選択できるスタイル(チェックボタン的)を選ぶことができます。
表示する項目の設定
リスト中に表示する項目の設定はRowSourceプロパティにシートのセル範囲を表す文字列を指定することで行います。
これも文字だとわかりにくいので、下の図のような手順で行ってください。





複数列のデータ表示
先ほどの例では、あらかじめ作成したリスト形式のデータから1列のみを表示する設定でしたが、RowSourceプロパティに複数列を含むセル範囲を指定した後にColumnCountプロパティにその列の数を指定することで、複数の列データを表示できます。
選択されている項目の取得
リストボックスで選択中の行はListIndexプロパティで取得します。選択中の項目の値はTextプロパティかValueプロパティで取得できます。他にもBoundColumnプロパティや、TextColumnプロパティによって、指定した列の項目の値がValueプロパティ、あるいはTextプロパティに保存されますが、説明が難しいので、動画などで理解してください。
手始めに選択されている項目を取得するマクロを作成します。

任意の位置の項目を取得
さて、次にリストボックスに表示された任意の行/列にある項目の値を取得するListプロパティやColumnプロパティを習得しましょう。
それぞれ、引数として行番号rowと、列番号columnを指定します。
・オブジェクト名.List(row, column)
・オブジェクト名.Column(column, row)
両者とも、行/列のインデックスは0から数えられるため、表示されている行と列より1小さい値を指定してください。
例えばワークシートのセルを指定する中で、Cellsプロパティがありましたが、Cellsプロパティは(行, 列)の順番で指定していました。
今回もその例にならって、(行, 列)で指定するListプロパティの方が個人的には使いやすいと思います。

特定の行をリスト先頭に表示する方法
先頭のリストを指定したい場合があります。そういう時にはTopIndexプロパティを使うことで、リストボックスの先頭に特定の行を表示させることができます。
複数行を選択するには
リストボックスで複数行を選択できるようにするには、リストボックスのMultiSelectプロパティをfmMultiSelectMultiあるいはfmMultiSelectExtendedに設定することで可能になります。
ちなみに選択されている行はSelectedプロパティによって取得します。Selectプロパティは、指定された行が選択された状態ならTrue、そうでないならFalseを返します。使い方は
オブジェクト名.Selected(Index)
の形であり、引数であるIndexには0から始まる行番号を指定します。
