トップページ

#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から始まる行番号を指定します。