この記事では、Excel VBAを使用して日付範囲に基づいてデータをフィルタリングする方法について詳しく解説します。具体的なコード例、その詳細解説、および多様な応用例を提供します。業務効率化を図る際に、このテクニックは非常に有用です。
Excel VBAの基本
Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。
そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

VBAを用いた日付範囲フィルタの基本
VBAを使ってExcelのデータを日付範囲でフィルタリングする場合の基本的な考え方は、特定の列に適用される条件に基づいて行をフィルタリングすることです。
基本的なコード構造
以下は、VBAで日付範囲に基づいてデータをフィルタリングする基本的なコード例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
' 日付範囲に基づいてデータをフィルタリングするVBAコード Sub FilterDataByDateRange() Dim startDate As Date Dim endDate As Date ' 日付範囲を設定 startDate = "2023-01-01" endDate = "2023-12-31" ' フィルタリング ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:=">=" & startDate, Operator:=xlAnd, Criteria2:="<=" & endDate End Sub |
コードの詳細解説
– startDate
とendDate
:フィルタリングする日付範囲を設定します。
– ActiveSheet.Range("A1").AutoFilter
:A1
セルから始まる範囲にフィルタを適用します。Field:=1
は最初の列(日付が格納されている列)にフィルタを適用することを意味します。
補足事項
– このコードはActiveSheetに適用されるため、対象のシートがアクティブであることを確認してください。
– フィルタリングの前に、すでに適用されているフィルタがあれば解除してください。
応用例
1. 複数のシートに適用する
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' 複数のシートにフィルタリングを適用するVBAコード Sub FilterMultipleSheets() Dim ws As Worksheet Dim startDate As Date Dim endDate As Date startDate = "2023-01-01" endDate = "2023-12-31" For Each ws In ThisWorkbook.Worksheets ws.Range("A1").AutoFilter Field:=1, Criteria1:=">=" & startDate, Operator:=xlAnd, Criteria2:="<=" & endDate Next ws End Sub |
2. ユーザー入力を受け取る
1 2 3 4 5 6 7 8 9 10 |
' ユーザーからの入力を受け取ってフィルタリングを適用するVBAコード Sub FilterByUserInput() Dim startDate As Date Dim endDate As Date startDate = InputBox("開始日を入力してください(例:2023-01-01)") endDate = InputBox("終了日を入力してください(例:2023-12-31)") ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:=">=" & startDate, Operator:=xlAnd, Criteria2:="<=" & endDate End Sub |
3. 別の列も考慮する
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' 日付だけでなく別の列(例:売上)もフィルタリング条件に加えるVBAコード Sub FilterByDateAndSales() Dim startDate As Date Dim endDate As Date Dim minSales As Double startDate = "2023-01-01" endDate = "2023-12-31" minSales = 1000 ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:=">=" & startDate, Operator:=xlAnd, Criteria2:="<=" & endDate ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=">=" & minSales End Sub |
4. データをソートする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
' フィルタリング後にデータをソートするVBAコード Sub FilterAndSortData() Dim startDate As Date Dim endDate As Date startDate = "2023-01-01" endDate = "2023-12-31" With ActiveSheet.Sort .SetRange ActiveSheet.Range("A1:B10") .Apply End With End Sub |
5. フィルタリングしたデータを新しいシートにコピーする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
' フィルタリングしたデータを新しいシートにコピーするVBAコード Sub FilterAndCopyData() Dim startDate As Date Dim endDate As Date Dim LastRow As Long startDate = "2023-01-01" endDate = " 2023-12-31" ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:=">=" & startDate, Operator:=xlAnd, Criteria2:="<=" & endDate LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row ActiveSheet.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Sheet2").Range("A2") End Sub |
まとめ
Excel VBAを使った日付範囲でのデータフィルタリングは、業務効率化に非常に役立つスキルです。この記事で紹介した基本的なコードと応用例を活用して、更に効率の良いデータ処理を実現してください。
VBAも良いけどパワークエリも良い
VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。
クリックするとパワークエリの全11講座が表示されます。
-
【初心者向け】パワークエリ入門:ETLツールを使ってエクセルデータを簡単に整形・統合しよう!(1/11)
-
【実践ガイド】パワークエリでデータ収集:Excel、CSV、PDF、Webデータを簡単に取り込む方法をマスターしよう!(2/11)
-
【総力特集】パワークエリで列操作をマスター:選択、変更、移動、削除、結合、分割の詳細解説&実践テクニック!(3/11)
-
【徹底解説】パワークエリで行操作をマスター!フィルター・保持・削除テクニックと練習用エクセルで実践学習(4/11)
-
パワークエリでデータクレンジング: 文字列結合、0埋め、テキスト関数をマスター(5/11)
-
パワークエリで四捨五入、切り捨て、切り上げをマスターする方法(6/11)
-
パワークエリで効率的なデータグループ化を実現する方法(7/11)
-
パワークエリで時間と日付の計算をマスター!便利な関数を使って効率アップ(8/11)
-
パワークエリで条件別集計をマスターする方法(9/11)
-
Excelパワークエリでクロス集計表とデータベース形式を瞬時に変換する方法(10/11)
-
Excelパワークエリ入門: 効率的なデータ整理をマスターしよう!(11/11)
パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください
コメント