OfficePro

複数列のリストボックスを作成する

広告

列が複数あるリストボックスを作成する方法を確認します。

表示したい値の配列を作成し、その配列を「List」プロパティを使って設定します。具体的な記述は次のようになります。

Sub テスト()
    Dim foodsArray(2, 2)
    
    foodsArray(0, 0) = "りんご"
    foodsArray(0, 1) = "100円"
    foodsArray(1, 0) = "オレンジ"
    foodsArray(1, 1) = "80円"
    
    Load sampleForm
    sampleForm.listFoods.ColumnCount = 2
    sampleForm.listFoods.List() = foodsArray
    sampleForm.Show
End Sub

リストボックスに何列表示するかについて「ColumnCount」プロパティを使って指定しています。

object.ColumnCount [= Long]
表示する列の数を設定します。

引数:
  object  設定するオブジェクトを指定します。
  Long  表示する列の数を指定します。

作成した後で各項目の値を変更するには同じく「List」プロパティを使います。

object.List( row, column ) [= Variant]
指定した行と列のリストの項目を返します。

引数:
  object  設定するオブジェクトを指定します。
  row  0 以上で、リストの項目数から 1 を引いた数以下の整数値を指定し
    ます。
  column  0 以上で、列の数から 1 を引いた数以下の整数値を指定します。
  Variant  項目の内容を指定します。

「List」プロパティは値を取得する時にも利用しましたが、設定したい行及び列を引数に指定して値を指定します。

具体的には次のように記述します。

Sub テスト()
    Dim foodsArray(2, 2)
    
    foodsArray(0, 0) = "りんご"
    foodsArray(0, 1) = "100円"
    foodsArray(1, 0) = "オレンジ"
    foodsArray(1, 1) = "80円"
    
    Load sampleForm
    sampleForm.listFoods.ColumnCount = 2
    sampleForm.listFoods.List() = foodsArray
    sampleForm.listFoods.List(0, 0) = "メロン"
    sampleForm.Show
End Sub

最初に配列を指定せずに「List」プロパティを使って各項目を指定しても出来るかと思いましたが、その場合何故かエラーとなります。

サンプルプログラム

では簡単なサンプルで試してみましょう。

testList6.bas

Sub テスト()
    Dim foodsArray(2, 2)
    
    foodsArray(0, 0) = "りんご"
    foodsArray(0, 1) = "100円"
    foodsArray(1, 0) = "オレンジ"
    foodsArray(1, 1) = "80円"
    
    Load sampleForm
    sampleForm.listFoods.ColumnCount = 2
    sampleForm.listFoods.List() = foodsArray
    sampleForm.listFoods.List(0, 0) = "メロン"
    sampleForm.Show
End Sub

上記マクロを実行すると次のように表示されます。

複数列のリストを作成

各列の幅の設定

複数の列を利用する場合に列毎の幅を設定するには「ColumnWidths」プロパティを使います。

object.ColumnWidths [= String]
各列の幅を設定します。

引数:
  object  設定するオブジェクトを指定します。
  String  列の幅をポイント単位で指定します。空白にするか、-1 を指定し
    たときには列幅が算出されます。幅が 0 に設定された列は表示されませ
    ん。ポイント以外の単位で指定する場合は、単位を明示してください。

複数の列の幅を同時に指定するときは、セミコロン (;) を区切り記号に使います。使用例としては次のようになります。

Sub テスト()
    Dim foodsArray(2, 2)
    
    foodsArray(0, 0) = "りんご"
    foodsArray(0, 1) = "100円"
    foodsArray(1, 0) = "オレンジ"
    foodsArray(1, 1) = "80円"
    
    Load sampleForm
    sampleForm.listFoods.ColumnCount = 2
    sampleForm.listFoods.List() = foodsArray
    sampleForm.listFoods.ColumnWidths  = "90;72;90"
    sampleForm.Show
End Sub

この場合、1 列目は 90 ポイント (1.25 インチ)、2 列目は 72 ポイント (1 インチ)、3 列目は 90 ポイントに設定されます。

列幅の指定をすべて省略すると、各列の幅は、コントロール自体の幅を均等割りした値となります。指定した列幅の合計がコントロール自体の幅より大きいと、リストは左端揃えで表示され、コントロールの表示領域の中に収まりきれない右端の列は表示されません。

( Written by Tatsuo Ikura )