皆さんは、VBAでListViewコントロールを使ったことがありますか?
データ一覧を操作する処理を作りたい場合、ListViewコントロールの使い方を覚えておくと便利です。
そこで今回は、
・ListViewコントロールとは
といった基礎的なことから、
・ListViewコントロールの使い方
・ListViewコントロールを使ったサンプルコード
・合わせて覚えると便利なファイル・フォルダ削除方法とは
といった応用的な方法まで、徹底的に解説します!
ListViewコントロールとは
はじめに、ListViewコントロールについて解説します。
ListViewコントロールは、Excelの画面を作るときに使うユーザーフォームのコントロールの一つです。
ListViewコントロールを使うと、次のように一覧形式のデータを使った処理を作ることができます。

Excelは一覧データを使うことが多いので、ListViewコントロールを使って一覧データを操作する方法を覚えておくと便利です。
ListViewコントロールの使い方
次に、ListViewコントロールの使い方について解説します。
ListViewコントロールをツールボックスに追加する方法
まずは、ListViewコントロールを使うための準備について解説します。
ListViewコントロールは、ユーザーフォームで最初から使えるコントロールにないため、使うための設定が最初に必要です。
追加方法は次のとおりです。
1. ユーザーフォームのコントロールで右クリックして、「その他のコントロール」を選択

2. 「Microsoft ListView Control, version X.X」を選択してOKボタンクリック

これでListViewコントロールを追加できました。
追加すると、ツールボックスに以下のようにコントロールが追加されます。

ListViewコントロールの追加方法
次に、ListViewコントロールをユーザーフォームに追加する方法について解説します。
他のコントロールと同じように、ユーザーフォームにドラッグして次のように追加します。

ListViewコントロールのおすすめ初期設定
次に、ListViewコントロールの見栄えを整える初期設定のコードについて解説します。
ユーザーフォームを開いたときの初期処理に「UserForm_Initialize」に、つぎのようなコードを書きます。
初期設定のコード:
Private Sub UserForm_Initialize()
  With ListView1
      .View = lvwReport           '一覧表示
      .Gridlines = True           'グリッド線の追加
      .FullRowSelect = True       '選択を行全体に変更
      .AllowColumnReorder = True  '列幅の変更を許可
  End With
End Sub
初期設定後の画面:

それぞれのプロパティの意味は、次のとおりです。
- Viewプロパティ:データの見せ方を指定
 - Gridlinesプロパティ:グリッド線の表示・非表示設定
 - FullRowSelectプロパティ:行全体選択可・不可を設定
 - AllowColumnReorderプロパティ:列幅の変更可・不可を設定
 
Viewプロパティはデータの見せ方を変えることができますが、一覧形式でデータを表示する場合は基本的にlvwReportを使うので、特に意識しなくてもOKです。
※「lvwReport」以外にも「lvwIcon」「lvwList」「lvwSmallIcon」
ここでは、lvwReportを使って解説していきますね。
列の追加方法
次に、一覧データに列を追加する方法について解説します。
列は次のように書くことで、追加することができます。
ListViewコントロール名.ColumnHeaders.Add 列名 , 列の表示名 , サイズ
例えば、Noとファイルパスの名前の列を追加するときは、次のように書きます。
Noとファイルパスの列を追加したサンプルコード:
Private Sub UserForm_Initialize()
  With ListView1
      .View = lvwReport           '一覧表示
      .FullRowSelect = True       '選択を行全体に変更
      .AllowColumnReorder = True  '列幅の変更を許可
      .Gridlines = True           'グリッド線の追加
      .ColumnHeaders.Add , "No", "No", 50
      .ColumnHeaders.Add , "FilePath", "ファイルパス", 400
  End With
実行画面:

このように、簡単に列を追加することができます。
データの追加方法
次に、リストにデータを追加する方法について解説します。
1列目に追加する場合と、2列目以降に追加する場合で書き方が違います。
1列目・2列目以降のデータの追加方法:
With ListView1.ListItems.Add
       .Text = 1列目のデータ
       .SubItems(1) = 2列目のデータ
       .SubItems(2) = 3列目のデータ
End With
先ほどのコードにテストデータを追加すると、次のようになります。
サンプルコード:
Private Sub UserForm_Initialize()
  With ListView1
      .View = lvwReport           '一覧表示
      .FullRowSelect = True       '選択を行全体に変更
      .AllowColumnReorder = True  '列幅の変更を許可
      .Gridlines = True           'グリッド線の追加
      .ColumnHeaders.Add , "No", "No", 50
      .ColumnHeaders.Add , "FilePath", "ファイルパス", 400
      
  End With
  
  '1行目にデータ追加
  With ListView1.ListItems.Add
      .Text = 1
      .SubItems(1) = ThisWorkbook.Path & "Test1.xlsx"
  End With
  '2行目にデータ追加
  With ListView1.ListItems.Add
      .Text = 2
      .SubItems(1) = ThisWorkbook.Path & "Test2.xlsx"
  End With
  '3行目にデータ追加
  With ListView1.ListItems.Add
      .Text = 3
      .SubItems(1) = ThisWorkbook.Path & "Test3.xlsx"
  End With
End Sub
実行結果:

これで、ListViewコントロールに一覧データができました。
チェックボックスを付ける方法
次に、チェックボックスを付ける方法について解説します。
次のようにプロパティを追加することで、簡単にチェックボックスを付けることができます。
ListView1.CheckBoxes = True
サンプルコードの画面初期化処理に、チェックボックスを付ける処理を追加しました。
サンプルコード:
Private Sub UserForm_Initialize()
  With ListView1
      .View = lvwReport           '一覧表示
      .FullRowSelect = True       '選択を行全体に変更
      .AllowColumnReorder = True  '列幅の変更を許可
      .Gridlines = True           'グリッド線の追加
      .CheckBoxes = True          'チェックボックスの追加
      .ColumnHeaders.Add , "No", "No", 50
      .ColumnHeaders.Add , "FilePath", "ファイルパス", 400
      
  End With
  
  '1行目にデータ追加
  With ListView1.ListItems.Add
      .Text = 1
      .SubItems(1) = ThisWorkbook.Path & "Test1.xlsx"
  End With
  '2行目にデータ追加
  With ListView1.ListItems.Add
      .Text = 2
      .SubItems(1) = ThisWorkbook.Path & "Test2.xlsx"
  End With
  '3行目にデータ追加
  With ListView1.ListItems.Add
      .Text = 3
      .SubItems(1) = ThisWorkbook.Path & "Test3.xlsx"
  End With
実行結果:

これで、チェックボックスを表示したListViewのデータを表示することができました。
チェックボックスで選択した値を表示するサンプルコード
次に、サンプルコードをもとに具体的な使い方を解説します。
さきほど解説したチェックボックス付きのデータ一覧を表示するサンプルに、チェックボックスにチェックを入れた値を表示する処理を追加したサンプルを用意しました。
処理を実行するためにボタンを追加し、ボタンのクリック処理でチェックした値をメッセージで表示するようにしています。
チェック時の画面:

チェック項目の確認ボタン(CommandButton1)クリック時のサンプルコード:
Private Sub CommandButton1_Click()
  Dim strMessageList As String
  Dim intNo As Integer
  Dim strFilePath As String
  Dim childData As Variant
  For Each childData In ListView1.ListItems
    'チェックがついていた場合の、ファイルパスを取得
    If childData.Checked = True Then
      'No、ファイルパスをそれぞれ取得
      intNo = childData.Text              'No
      strFilePath = childData.SubItems(1) 'ファイルパス
      
      '結果をメッセージに格納
      strMessageList = strMessageList & "【No" & intNo & "のデータ】" & vbCrLf 'Noをメッセージに追加
      strMessageList = strMessageList & strFilePath & vbCrLf                   'ファイルパスをメッセージに追加
      strMessageList = strMessageList & vbCrLf                                 '改行をメッセージに追加
    End If
  Next
  
  'チェックした情報をメッセージで表示
  MsgBox "チェックしたデータは以下のとおりです。" & vbCrLf & vbCrLf & _
         strMessageList
End Sub
実行結果:

このように、チェックした内容を使って簡単に処理を作ることができます。
ちなみに、以下記事でユーザーフォームの使い方について詳しく解説しています。
今回使ったボタンの追加方法だけでなく、テキストボックスやリストボックスの使い方についてもまとめているので、気になる方は見てみてくださいね!
            
                
                    
合わせて覚えると便利なファイル・フォルダ削除方法とは
今回は、ファイルパスをメッセージで表示するサンプルを用意しましたが、実際はファイルパスを使って処理を組み込むことが多いですよね。
なかでもフォルダ整理のために、ファイル削除・フォルダ削除をする処理はよく使います。
そのため、DeleteFolderメソッドでフォルダ削除・Killステートメントでファイル削除する方法を覚えておくと便利です。
使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!
            
                
                    
            
                
                    
まとめ
今回は、ListViewコントロールの使い方について徹底的に解説しました!
ListViewコントロールは一覧データを使って処理を作ることができるので、使いこなすとツールを作る幅が広がります。
使い方も簡単なので、ぜひ使ってみてくださいね!
  





