教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

ExcelVBAでListViewを使用してデータを表形式で表示する方法

構文

構文は以下の通りです。

Dim 一覧ビュー As ListView
Set 一覧ビュー = Me.一覧ビュー名
With 一覧ビュー
    .View = lvwReport ' 表形式(レポート形式)を設定
    .ColumnHeaders.Add , , "列名1", 100 ' 列の追加(列名と幅を指定)
    .ColumnHeaders.Add , , "列名2", 100
    .ColumnHeaders.Add , , "列名3", 100
    ' データの追加
    Dim 項目 As ListItem
    Set 項目 = .ListItems.Add(, , "データ1") ' 1行目の最初の列
    項目.SubItems(1) = "データ2" ' 1行目の2列目
    項目.SubItems(2) = "データ3" ' 1行目の3列目
End With

解説

Me.一覧ビュー名は、フォーム上にあるListViewコントロールを指します。.View = lvwReportは、ListViewを表形式で表示する設定です。.ColumnHeaders.Addを使用して、表示する列を追加します。列名と列幅(単位はポイント)を指定します。ListItems.Addを使って最初の列にデータを追加し、項目.SubItemsで2列目以降のデータを追加します。

【ListView.Viewの種類】

定数 内容
lvwIcon 各項目が大きなアイコンで表示される形式です。ファイルエクスプローラーの「大アイコン」表示に似ています。
lvwSmallIcon 各項目が小さいアイコンで表示される形式です。ファイルエクスプローラーの「小アイコン」表示に似ています。
lvwList 項目がリスト形式で1列に表示されます。アイコンは小さいサイズで表示され、横方向に並びます。
lvwReport 項目が表形式で表示され、複数の列にデータを表示できます。Excelのセルのような形式です。

プログラミング例

具体的なプログラミング例を紹介します。

Dim データ一覧 As ListView
Set データ一覧 = Me.ListView1
With データ一覧
    .View = lvwReport
    .ColumnHeaders.Add , , "名前", 100
    .ColumnHeaders.Add , , "年齢", 50
    .ColumnHeaders.Add , , "住所", 150
    ' 1行目のデータを追加
    Dim 一行目 As ListItem
    Set 一行目 = .ListItems.Add(, , "田中 太郎")
    一行目.SubItems(1) = "10歳"
    一行目.SubItems(2) = "東京都"
    ' 2行目のデータを追加
    Set 一行目 = .ListItems.Add(, , "佐藤 花子")
    一行目.SubItems(1) = "12歳"
    一行目.SubItems(2) = "大阪府"
End With

上記のプログラムは、ListViewコントロールの変数としてデータ一覧を使用しています。名前、年齢、住所の3つの列を追加し、各列の幅も指定しています。2人分のデータを1行目と2行目に追加し、田中 太郎さんのデータが1行目に、佐藤 花子さんのデータが2行目に表示されます。

まとめ

ListViewを使った表形式表示では、列のヘッダーを定義し、各行にデータを追加することが重要です。ViewをlvwReportに設定することで、レポート形式(表形式)の表示が可能です。各行にデータを追加するには、ListItems.Addを使い、複数列を持つデータを扱う場合はSubItemsで各列に値を設定します。