【EXCEL VBA】オートフィルタで日付を指定する

VBAからオートフィルタで条件設定する方法を紹介します。

今回は、日付による条件指定を解説します。これまでの文字列でのオートフィルタと異なり、日付でのオートフィルタには癖があります。この癖を回避する方法を紹介します。

日付指定時の等号/不等号(大なり、小なり)、複数条件指定の書き方については、これまでと同様になります。サンプルプログラムで確認してください。

事前準備

データを準備します。こちらのデータは、テストデータ生成サイトで作成しました。

日付のオートフィルタの注意点

日付のオートフィルタの注意点としては、日付の表示形式です。人が日付を認識する際、
 「2020/1/1」
 「2020/01/01」
 「2020年1月1日」
いずれも同じ日付となりますが、VBA AutoFilterでは異なる日付とみなされます。この癖を知らないとハマります。Excelが内部で持つ値と表示される値に差異があるためです。詳細な違いについては、以下の方が詳しく説明していますので参照してみてくだい。本記事では解決方法のみ紹介します。

サンプルプログラム

「等しい」で日付を絞り込む方法です。実はこれが一番難しい。ただし、以下方法を利用することで簡単になります。単純な「等しい」だと、値と表示形式の差異の関係で正しくフィルタされないことがあります。よって、不等号と複数条件指定を使い「等しい」でフィルタしています。

Sub sample1()
    
    ' 2017/8/1でフィルタ
    Range("A1").AutoFilter 3, ">=2017/8/1", xlAnd, "<=2017/8/1"

End Sub

以下は「以上、以下、大なり、小なり」でのフィルタリングです。「以上、以下、大なり、小なり」のフィルタリング時は、Excelが良い感じに値と表示形式の差異を吸収してくれるので、何も考えずとも期待通りのフィルタがされれます。

Sub sample2()
    
    ' 2017/8/1以降でフィルタ
    Range("A1").AutoFilter 3, ">=2017/8/1"

End Sub
Sub sample3()
    
    ' 2017/8/1以降、2017/10/1より前でフィルタ
    Range("A1").AutoFilter 3, ">=2017/8/1", xlAnd, "<2017/10/1"

End Sub