【VBA入門】ListViewコントロールでデータ一覧を操作する方法とは

皆さんは、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

実行結果:

このように、チェックした内容を使って簡単に処理を作ることができます。

ちなみに、以下記事でユーザーフォームの使い方について詳しく解説しています。

今回使ったボタンの追加方法だけでなく、テキストボックスやリストボックスの使い方についてもまとめているので、気になる方は見てみてくださいね!

【VBA入門】ユーザーフォームの使い方(テキスト表示、カレンダー)
更新日 : 2019年4月22日

合わせて覚えると便利なファイル・フォルダ削除方法とは

今回は、ファイルパスをメッセージで表示するサンプルを用意しましたが、実際はファイルパスを使って処理を組み込むことが多いですよね。

なかでもフォルダ整理のために、ファイル削除・フォルダ削除をする処理はよく使います。

そのため、DeleteFolderメソッドでフォルダ削除・Killステートメントでファイル削除する方法を覚えておくと便利です。

使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

【ExcelVBA入門】DeleteFolderメソッドを使ったフォルダ削除方法とは
更新日 : 2018年8月28日
【ExcelVBA入門】Killステートメントでファイルを削除する方法とは
更新日 : 2019年9月1日

まとめ

今回は、ListViewコントロールの使い方について徹底的に解説しました!

ListViewコントロールは一覧データを使って処理を作ることができるので、使いこなすとツールを作る幅が広がります。

使い方も簡単なので、ぜひ使ってみてくださいね!

\業界最安級/
月額2,980円のプログラミングスクール

✔ 業界最安値の月定額2,980円
✔ 「Q&A掲示板」で平均30分以内に回答がもらえる
✔ 月に一度の「オンライン相談」で悩みを解決
✔ 教材の数は30種類以上
✔ 入会金不要+いつでも退会OK

公式サイトはこちら

Writer

Sanshiro Wakizaka

フリーランス

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close