大体でIT
大体でIT
Excel VBAを使って、オートフィルタで日付をフィルタする方法について、ご紹介します。日付フィルタがありますけど、日付をフィルタする場合も、「比較演算子」や「論理演算子」を組み合わせてフィルタすると、簡単です。
この記事では、VBAを使ってオートフィルタで日付をフィルタする方法について、ご紹介しました。
日付をフィルタする場合は、「比較演算子」と「論理演算子」を組み合わせて、フィルタするとうまくフィルタすることができます。
日付フィルタもありますけど、フィルタしたい日付を作成して「比較演算子」や「論理演算子」を使ってフィルタした方が簡単です。
では、VBAを使ってオートフィルタで日付をフィルタする方法について、解説していきます。
- VBAを使ってオートフィルタで日付をフィルタする方法
オートフィルタで日付をフィルタするVBAコードについて、まとめています。
VBAコードだけ確認したい場合に、ご活用ください。
Range("A1").AutoFilter 1, "2021/8/1" '日付をフィルタ
Range("A1").AutoFilter 1, ">2021/12/1" '指定した日付「より大きい」
Range("A1").AutoFilter 1, ">=2021/12/1" '指定した日付「以上」
Range("A1").AutoFilter 1, "<2021/8/1" '指定した日付「より小さい」
Range("A1").AutoFilter 1, "<=2021/8/1" '指定した日付「以下」
Range("A1").AutoFilter 1, ">=2021/7/1", xlAnd, "<=2022/1/1" '指定した「期間」
Range("A1").AutoFilter 1, "<2021/7/1", xlOr, ">2022/1/1" '指定した期間を「含まない」
Range("A1").AutoFilter 1, Array("2021/5/1", "2021/8/1", "2021/12/1"), xlFilterValues '複数の日付
日指定した日付「"2021/8/1"」でフィルタしてみます。
Sub TEST1()
'日付をフィルタ
Range("A1").AutoFilter 1, "2021/8/1"
End Sub
元データ
「"2021/8/1"」でフィルタ
「"2021/8/1"」でフィルタできました。簡単です。
ピンポイントでフィルタする際の注意点がありますので、解説していきます。
日付でフィルターする際の注意は、1文字でも表示が違うとフィルタされないということです。
オートフィルタでは、表示された文字でフィルタするためです。
1文字でも違うとフィルタできない
例えば、「"2021/8/1"」を「"2021/08/01"」でフィルタしてみます。
Sub TEST2()
'日付をフィルタ
Range("A1").AutoFilter 1, "2021/08/01" '←これではフィルタできない
End Sub
セルに入力した日付でそのままではフィルタできない
同じ考えでセルに入力した日付で、フィルタする場合も注意が必要です。
Sub TEST3()
'セルの値を使ってフィルタ
Range("A1").AutoFilter 1, Range("D1") '←これではフィルタできない
End Sub
セルの値を取得した際に、VBAでは、「"2021/08/01"」となるためです。
表の値は「"2021/8/1"」で、セルから取得した値は「"2021/08/01"」となって、表示形式が違うため、フィルタできません。
表示形式を指定して日付をフィルタする
ピンポイントでフィルタする場合は、表示形式を指定して日付をフィルタします。
Sub TEST4()
'表示形式を指定して日付をフィルタ
Range("A1").AutoFilter 1, Format(Range("D1"), "yyyy/m/d")
End Sub
「NumberFormatLocal」が便利
表示形式を取得する際には、「NumberFormatLocal」を使うと便利です。
Sub TEST5()
'表示形式を指定して日付をフィルタ
Range("A1").AutoFilter 1, Format(Range("D1"), Range("D1").NumberFormatLocal)
End Sub
こんな感じで、ピンポイントでフィルタする場合は、「一字一句同じ文字」にする必要があります。
ちなみに、「比較演算子」を使った場合は、表示形式まで等しくする必要はありません。
「ワイルドカード」は使えない
日付のフィルタをする際に、「ワイルドカード」は使えません。
Sub TEST6()
'ワイルドカードは使えない
Range("A1").AutoFilter 1, "2021/8/*"
End Sub
日付のフィルタをする際は、ワイルドカードではなく、「比較演算子」や「論理演算子」を組み合わせて、期間のフィルタや複数の日付のフィルタをします。
- 「">値"」 :値より大きい
- 「"<値"」 :値より小さい
- 「">=値"」:値以上
- 「"<=値"」:値以下
- 「"<>値"」:値以外
- 「""」 :空白
- 「"<>"」 :空白以外
- 「xlAnd」:ANDの意味
- 「xlOr」:ORの意味
「"2021/12/1"」より大きい日付でフィルタ
Sub TEST7()
'指定した日付「より大きい」
Range("A1").AutoFilter 1, ">2021/12/1"
End Sub
「"2021/12/1"」より大きい日付でフィルタできました。
「"2021/12/1"」以上で日付でフィルタ
Sub TEST8()
'指定した日付「以上」
Range("A1").AutoFilter 1, ">=2021/12/1"
End Sub
「"2021/12/1"」以上で日付でフィルタできました。
「"2021/8/1"」より小さい日付でフィルタ
Sub TEST9()
'指定した日付「より小さい」
Range("A1").AutoFilter 1, "<2021/8/1"
End Sub
「"2021/8/1"」より小さい日付でフィルタできました。
「"2021/8/1"」以下で日付でフィルタ
Sub TEST10()
'指定した日付「以下」
Range("A1").AutoFilter 1, "<=2021/8/1"
End Sub
「"2021/8/1"」以下で日付でフィルタできました。
「"2021/7/1"」~「"2022/1/1"」でフィルタ
「">=2021/7/1", xlAnd, "<=2022/1/1"」でフィルタします。
Sub TEST11()
'指定した「期間」
Range("A1").AutoFilter 1, ">=2021/7/1", xlAnd, "<=2022/1/1"
End Sub
「"2021/7/1"」~「"2022/1/1"」でフィルタできました。
「"2021/7/1"」~「"2022/1/1"」を含まない
「"<2021/7/1", xlOr, ">2022/1/1"」でフィルタします。
Sub TEST12()
'指定した期間を「含まない」
Range("A1").AutoFilter 1, "<2021/7/1", xlOr, ">2022/1/1"
End Sub
「"2021/7/1"」~「"2022/1/1"」を含まない日付をフィルタできました。
「"2021/5/1"」「"2021/8/1"」「"2021/12/1"」でフィルタ
「Array("2021/5/1", "2021/8/1", "2021/12/1"), xlFilterValues」でフィルタします。
第3引数に「xlFilterValues」を入力するのがポイントです。
Sub TEST13()
'複数の日付
Range("A1").AutoFilter 1, Array("2021/5/1", "2021/8/1", "2021/12/1"), xlFilterValues
End Sub
「"2021/5/1"」「"2021/8/1"」「"2021/12/1"」でフィルタできました。
2021年8月の最初の日「"2021/8/1"」と最後の日「"2021/8/31"」を作成して、フィルタします。
Sub TEST14()
a = "2021/8/1"
b = WorksheetFunction.EoMonth(a, 0) '月末:2021/8/31
Range("A1").AutoFilter 1, ">=" & a, xlAnd, "<=" & b
End Sub
月末を取得するには、「WorksheetFunction.EoMonth("2021/8/1", 0)」とすることで「"2021/8/31"」を取得することができます。
「"2021/8/1"」~「"2021/8/31"」でフィルタ
「"2021/8/1"」~「"2021/8/31"」でフィルタできました。
こんな感じで、日付を作成して、比較演算子と論理演算子を組み合わせてフィルタします。
VBAで日付をフィルタする場合、「日付フィルタ」を使うことができます。
日付フィルタはオートフィルタで日付をフィルタする際に使える機能です。
日付フィルタの引数一覧
日付フィルタを使う際は、第2引数と第3引数に、次の値を入力することで使えます。
- 明日:第2引数(3), 第3引数(11)
- 今日:第2引数(1), 第3引数(11)
- 昨日:第2引数(2), 第3引数(11)
- 来週:第2引数(6), 第3引数(11)
- 今週:第2引数(4), 第3引数(11)
- 先週:第2引数(5), 第3引数(11)
- 来月:第2引数(9), 第3引数(11)
- 今月:第2引数(7), 第3引数(11)
- 先月:第2引数(8), 第3引数(11)
- 来四半期:第2引数(12), 第3引数(11)
- 今四半期:第2引数(10), 第3引数(11)
- 前四半期:第2引数(11), 第3引数(11)
- 来年:第2引数(15), 第3引数(11)
- 今年:第2引数(13), 第3引数(11)
- 昨年:第2引数(14), 第3引数(11)
- 今年の初めから今日まで:第2引数(16), 第3引数(11)
VBAコードの例を記載するとこんな感じになります。
Range("A1").AutoFilter 1, 3, 11 '明日
Range("A1").AutoFilter 1, 1, 11 '今日
Range("A1").AutoFilter 1, 2, 11 '昨日
Range("A1").AutoFilter 1, 6, 11 '来週
Range("A1").AutoFilter 1, 4, 11 '今週
Range("A1").AutoFilter 1, 5, 11 '先週
Range("A1").AutoFilter 1, 9, 11 '来月
Range("A1").AutoFilter 1, 7, 11 '今月
Range("A1").AutoFilter 1, 8, 11 '先月
Range("A1").AutoFilter 1, 12, 11 '来四半期
Range("A1").AutoFilter 1, 10, 11 '今四半期
Range("A1").AutoFilter 1, 11, 11 '前四半期
Range("A1").AutoFilter 1, 15, 11 '来年
Range("A1").AutoFilter 1, 13, 11 '今年
Range("A1").AutoFilter 1, 14, 11 '昨年
Range("A1").AutoFilter 1, 16, 11 '今年の初めから今日まで
「現在の日付」を基準にフィルタすることができます。
日付フィルタの全期間の引数一覧
日付フィルタの全期間の引数一覧は、こんな感じです。
- 第1四半期:第2引数(17), 第3引数(11)
- 第2四半期:第2引数(18), 第3引数(11)
- 第3四半期:第2引数(19), 第3引数(11)
- 第4四半期:第2引数(20), 第3引数(11)
- 1月:第2引数(21), 第3引数(11)
- 2月:第2引数(22), 第3引数(11)
- 3月:第2引数(23), 第3引数(11)
- 4月:第2引数(24), 第3引数(11)
- 5月:第2引数(25), 第3引数(11)
- 6月:第2引数(26), 第3引数(11)
- 7月:第2引数(27), 第3引数(11)
- 8月:第2引数(28), 第3引数(11)
- 9月:第2引数(29), 第3引数(11)
- 10月:第2引数(30), 第3引数(11)
- 11月:第2引数(31), 第3引数(11)
- 12月:第2引数(32), 第3引数(11)
'期間内の全日付
Range("A1").AutoFilter 1, 17, 11 '第1四半期
Range("A1").AutoFilter 1, 18, 11 '第2四半期
Range("A1").AutoFilter 1, 19, 11 '第3四半期
Range("A1").AutoFilter 1, 20, 11 '第4四半期
Range("A1").AutoFilter 1, 21, 11 '1月
Range("A1").AutoFilter 1, 22, 11 '2月
Range("A1").AutoFilter 1, 23, 11 '3月
Range("A1").AutoFilter 1, 24, 11 '4月
Range("A1").AutoFilter 1, 25, 11 '5月
Range("A1").AutoFilter 1, 26, 11 '6月
Range("A1").AutoFilter 1, 27, 11 '7月
Range("A1").AutoFilter 1, 28, 11 '8月
Range("A1").AutoFilter 1, 29, 11 '9月
Range("A1").AutoFilter 1, 30, 11 '10月
Range("A1").AutoFilter 1, 31, 11 '11月
Range("A1").AutoFilter 1, 32, 11 '12月
現在の日付によらず、全期間で日付をフィルタします。
では、「日付フィルタ」で日付をフィルタしてみます。
この記事を記載している日は、「2021/6/21」ですので、「6月」をフィルタすることになります。
Sub TEST15()
Range("A1").AutoFilter 1, 7, 11 '今月
End Sub
「今月」でフィルタ
Sub TEST16()
Range("A1").AutoFilter 1, 28, 11 '8月
End Sub
「8月」でフィルタ
日付フィルタも紹介しましたけども、日付をフィルタする際は、「比較演算子」と「論理演算子」を組み合わせてフィルタした方が簡単です。
この記事では、VBAを使ってオートフィルタで日付をフィルタする方法について、ご紹介しました。
日付をフィルタする場合は、「比較演算子」と「論理演算子」を組み合わせて、フィルタするとうまくフィルタすることができます。
日付フィルタもありますけど、フィルタしたい日付を作成して「比較演算子」や「論理演算子」を使ってフィルタした方が簡単です。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。