#719 リストボックスのすべての行と列のデータを取得するには? フォーム、VBA

リストボックスコントロールでは、「列数」プロパティを指定することでその選択肢に複数列表示させることができます。そのような状態のとき、そのすべての行と列のデータをVBAのプログラムで取得する例です。
単に項目を選択することを目的としたリストボックスではそのような処理を必要とすることは少ないかもしれません。しかし何らかの条件でデータを抽出してその結果をリストボックスに表示しているようなとき、その抽出結果の内容を走査したいようなケースでは使えると思います。

次の例では、下図のようなフォームを使って動作させてみます。


ここでは、あらかじめ上部のリストボックス「lst商品」に5列のデータが表示されるようプロパティ設定してあります。また、コマンドボタン「cmd全行列データ取得」をクリックすると、そのすべての行と列のデータが取り出され、画面下のテキストボックス「txt結果」にその結果が”カンマ区切り”で表示されます。

コマンドボタンのクリック時イベントプロシージャは次の通りです。

Private Sub cmd全行列データ取得_Click()
'[全行列データ取得]ボタンクリック時

  Dim intRow As Integer
  Dim intCol As Integer
  Dim strData As String

  With Me!lst商品
    '行方向のループ
    For intRow = 0 To .ListCount - 1
      '列方向のループ
      For intCol = 0 To .ColumnCount - 1
        '指定行列1つ分のデータ取得
        strData = strData & .Column(intCol, intRow) & ", "
      Next intCol
      strData = strData & vbCrLf
    Next intRow
  End With

  Me!txt結果 = strData

End Sub


ポイント:
  • 「ListCount」プロパティ ・・・・ リストボックスに何行のデータがあるかを取得することができます。

  • 「ColumnCount」プロパティ ・・・・ リストボックスに何列のデータがあるかを取得することができます。

  • 「Column」プロパティ ・・・・ 指定した行と列の1つの項目の値を取得することができます。

    Columnプロパティのカッコには、最初に「列番号」、次に「行番号」で、「列・行」の順に指定します。間違えないよう注意してください。
    またカッコ内に指定する値は先頭項目が「0」となります。ListCountやColumnCountプロパティでは行列それぞれ何個あるかを取得できますが、仮にその数が「5」であった場合、「1〜5」ではなく「0〜4」と指定します。よってループで処理する際は「0」〜「それらのプロパティ値ー1」を回すことになります。
    ループ処理ではなく、「Me!lst商品.Column(X, Y)」のXやYに任意の数値を指定することで、特定の1つのデータだけを取り出すこともできます。

実行例:[全行列データ取得]ボタンクリック後
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved