VBAでリストビューにフィルタリング結果を表示する方法

Visual Basic

この記事では、VBA(Visual Basic for Applications)を使用して、Excelのリストビューにデータをフィルタリングして表示する方法について解説します。質問者が抱える問題、すなわち「コマンドボタンを押して実行すると、特定の担当者のみが表示される」という問題に対して、リストビューを正しく更新する方法を説明します。

1. リストビューの基本設定

まず、リストビューの基本設定として、列ヘッダーを設定し、データの表示方法を決めます。この設定では、ListViewをレポートビューにし、列ヘッダーや行全体の選択を有効にするなど、リストビューに必要な設定を行います。

2. AutoFilterによるフィルタリング

質問者のコードでは、AutoFilterを使ってシート「d」の2列目で担当者「A」をフィルタリングしています。このフィルタリングを行った後、フィルタリングされた結果に基づいてリストビューにデータを反映させる必要があります。

3. リストビューの更新方法

リストビューを更新するには、まず既存のアイテムや列ヘッダーをクリアします。その後、フィルタリングされたデータを一行ずつリストビューに追加します。質問者が行っているように、forループでシートの行を走査し、リストビューにデータを追加します。

以下のコードで、リストビューにフィルタリングされたデータを表示する方法を説明します。

Private Sub CommandButton1_Click()
Worksheets("d").Range("A1").AutoFilter field:=2, Criteria1:="A"
End Sub

Private Sub UserForm_Initialize()
 Dim wS As Worksheet ' データ元のシート
 Set wS = ThisWorkbook.Sheets("d")

 Dim lastRow As Long
 lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row ' A列の最終行を取得

 Dim i As Long
 Dim li As ListItem ' ListViewの各行を表すオブジェクト

 ' 更新中の描画を一時停止し、処理を高速化
 Me.ListView1.ColumnHeaders.Clear ' 既存の列ヘッダーをクリア
 Me.ListView1.ListItems.Clear ' 既存のアイテム(行)をクリア

 ' 列ヘッダーの設定
 With Me.ListView1.ColumnHeaders
 .Add , "Col1", "名前", 50 ' Key, Text, Width
 .Add , "Col2", "担当", 100
 .Add , "Col3", "年齢", 80
 .Add , "Col4", "生年月日", 80
 End With

 ' 表示モードの設定
 Me.ListView1.View = lvwReport ' レポートビュー
 Me.ListView1.FullRowSelect = True ' 行全体を選択可能にする
 Me.ListView1.Gridlines = True ' グリッド線を表示する

 ' データの追加
 For i = 2 To lastRow ' 2行目から最終行まで
 Set li = Me.ListView1.ListItems.Add(Text:=wS.Cells(i, "A").Value) ' 最初の列のデータを設定
 li.SubItems(1) = wS.Cells(i, "B").Value ' 2列目のデータを設定
 li.SubItems(2) = wS.Cells(i, "C").Value
 li.SubItems(3) = Format(wS.Cells(i, "D").Value, "yyyy/mm/dd") ' 日付の書式設定
 Next i
End Sub

4. フィルタリングされたデータの表示

フィルタリング後、リストビューにデータを反映させる際に重要な点は、フィルタリングの結果が正しく表示されることです。上記のコードでは、リストビューのアイテムとして、フィルタリングされた各行を追加していきます。リストビューに表示されるデータは、指定した担当者「A」に関連する行のみです。

まとめ

VBAを使ってリストビューにフィルタリング結果を表示する方法について説明しました。Excelでデータをフィルタリングし、その結果をリストビューに反映させることで、ユーザーにとって直感的で使いやすいインターフェースを提供できます。リストビューを正しく更新するために、コードの順番や処理の流れをしっかり確認し、必要に応じてフィルタリング条件を変更することができます。

コメント

タイトルとURLをコピーしました