エクセル VBA ListViewのListItems・SubItemsコレクションとは(Excel VBA)

【本日のミッション】

エクセル VBA ListViewオブジェクト の ListItemsコレクション・SubItemsコレクションを解明せよ。

ミッションの概要

エクセル VBA ListViewオブジェクト の ListItemsコレクション・SubItemsコレクションを解明せよ、というのが今回のミッションです。

ListViewオブジェクトを使う時、表示形式を詳細表示「lvwReport」にしていると、複数列のデータを表示させることができるのですが、列によって扱うコレクションが異なります。

ここに出てくるListItemsコレクション」と「SubItemsコレクションの使い方を調べてみました。

プロシージャ

ListItemsコレクション・SubItemsコレクションの動作を確認するために、下記プロシージャをサンプルとして使用します。

その他のコードの内容につきましては、エクセル VBA ListViewにドラッグ&ドロップでファイル名・ファイルパス複数の情報を取得(Excel VBA)をご参照ください。

ファイルをドラッグ&ドロップすると、No(連番)、ファイル名、ファイルパスを取得するコードになります。

Private Sub UserForm_Initialize()
    With ListView1
        '■プロパティ設定
        .FullRowSelect = True           '行全体の選択
        .Gridlines = True               '行列グリッド線の表示
        .LabelEdit = lvwManual          'ラベル編集不可
        .OLEDropMode = ccOLEDropManual  'ファイルドロップ処理
        .View = lvwReport               '表示形式

        '■列見出しの名前・列幅の設定
        .ColumnHeaders.Add , "key1", "No", 30, lvwColumnLeft        
        .ColumnHeaders.Add , "key2", "ファイル名", 100, lvwColumnLeft
        .ColumnHeaders.Add , "key3", "ファイルパス", 300, lvwColumnLeft
    End With
End Sub

Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
    '【変数】
    Dim i As Long           'カウンター
    Dim fileCount As Long   'ファイル数
    
    With ListView1
        '■既存ファイル名のクリア
        .ListItems.Clear
        
        '■ファイル数の取得
        fileCount = Data.Files.Count
        
        '■ドラッグ&ドロップしたファイル名・ファイルパスを順にリスト化
        For i = 1 To fileCount
            With .ListItems.Add
                .Text = i                           ’No
                .SubItems(1) = Dir(Data.Files(i))   'ファイル名
                .SubItems(2) = Data.Files(i)        'ファイルパス
            End With
        Next i
    End With
End Sub
■■■スポンサーリンク■■■

ListItemsコレクション・SubItemsコレクション

ListViewの表示形式を詳細表示「lvwReport」(参考:エクセル VBA ListView の View プロパティ とは(Excel VBA))にしている場合、ListItemsコレクションは左の1列目のみになります。2列目以降は1列目「ListItemsコレクション」の「SubItemsコレクションになります。

今回のプロシージャの処理の順番は下記の通りです。

  1. ListItems.Addで「ListItemsコレクション」を追加します。
  2. 追加された「ListItemsコレクション」の Text に No(i)を入れます。
  3. 追加された「ListItemsコレクション」の1つ目のSubItemsコレクション」にファイル名(i番目)を入れます。
  4. 追加された「ListItemsコレクション」の2つ目のSubItemsコレクション」にファイルパス(i番目)を入れます。
For i = 1 To fileCount
    With .ListItems.Add
        .Text = i                          'No
        .SubItems(1) = Dir(Data.Files(i))  'ファイル名
        .SubItems(2) = Data.Files(i)       'ファイルパス
    End With
Next i

上記コードの処理がどんな風に行われているか、具体的に表記するならこんな感じです。
変数iを数字で、ファイル名・ファイルパスを実際のテキストとして表示しています。

1つ目の ListItems が追加されて、その Text に「1」が入ります。
追加された ListItems の1つ目の SubItems に「File1_1.xlsx」が入ります。
追加された ListItems の2つ目の SubItems に「C:\VBA\第1階層\File1_1.xlsx」が入ります。

2つ目の ListItems が追加されて、その Text に「2」が入ります。
追加された ListItems の1つ目の SubItems に「File1_2.xlsx」が入ります。
追加された ListItems の2つ目の SubItems に「C:\VBA\第1階層\File1_2.xlsx」が入ります。

3つ目の ListItems が追加されて、その Text に「3」が入ります。
追加された ListItems の1つ目の SubItems に「File1_3.xlsx」が入ります。
追加された ListItems の2つ目の SubItems に「C:\VBA\第1階層\File1_3.xlsx」が入ります。

With .ListItems.Add
    .Text = 1                                       'No
    .SubItems(1) = "File1_1.xlsx"                   'ファイル名
    .SubItems(2) = "C:\VBA\第1階層\File1_1.xlsx"    'ファイルパス
End With
        
With .ListItems.Add
    .Text = 2                                       'No
    .SubItems(1) = "File1_2.xlsx"                   'ファイル名
    .SubItems(2) = "C:\VBA\第1階層\File1_2.xlsx"    'ファイルパス
End With
        
With .ListItems.Add
    .Text = 3                                       'No
    .SubItems(1) = "File1_3.xlsx"                   'ファイル名
    .SubItems(2) = "C:\VBA\第1階層\File1_3.xlsx"    'ファイルパス
End With

【参考】

VBA(マクロ)作成の前、リボンに開発タブを表示させる(Excel VBA)
ユーザーフォームの作成方法 準備(Excel VBA)
ユーザーフォームのオブジェクトの名前を「UserForm1」から変更する方法(Excel VBA)
ユーザーフォームの上のバー(タイトルバー)の名前を「UserForm1」から変更する(Excel VBA)
ユーザーフォームのオブジェクトウィンドウとコードウィンドウを表示切替させる方法(Excel VBA)
「オブジェクト名が不正です」を出さないようにユーザーフォームオブジェクト名を命名規則に従って変更(Excel VBA)
エクセルファイルが開いた時にユーザーフォームを表示させる方法(Excel VBA)
エクセル フォームのラベルのテキストを縦書きにする方法(Excel VBA)
エクセル VBA フォーム ツールボックスにListViewコントロールを追加(Excel VBA)
エクセル VBA フォーム「Microsoft ListView Control」が出てこない原因 (Excel VBA)
エクセル VBA ListViewにドラッグ&ドロップでファイルパスを取得(Excel VBA)
エクセル VBA ListViewにスクロールバーを表示させる(Excel VBA)
エクセル VBA ListView の FullRowSelect プロパティとは(Excel VBA)
エクセル VBA ListView の Gridlines プロパティとは(Excel VBA)
エクセル VBA ListView の LabelEdit プロパティとは(Excel VBA)
エクセル VBA ListView の OLEDropMode プロパティとは(Excel VBA)
エクセル VBA ListView の View プロパティ とは(Excel VBA)
エクセル VBA ListView の ColumnHeaders コレクションとは(Excel VBA)
エクセル VBA ListViewにドラッグ&ドロップでファイル名・ファイルパス複数の情報を取得(Excel VBA)
エクセル VBA ListViewのListItems・SubItemsコレクションとは(Excel VBA)
エクセル VBA ListView の OLEDragDropイベントとは(Excel VBA)

■■■スポンサーリンク■■■