Excel。マクロ032。日付の抽出はクセが強いので、注意しないといけない点があります。
<Excel VBA:日付抽出>
Excelの作業の中でも、「データを読み込んで」→「抽出」という流れはよくあるのですが、
これをマクロ化しておくと便利ということで、
Excel VBAで作ることがあるのですが、
その中でも日付を使った抽出には、
クセがあって、注意しないと、
「アレ?おかしいなぁ~」ということが発生します。
では、次のデータを使って確認してみましょう。
【Excel2007までのバージョンの問題】
日付フィールドを使って抽出するときに、バージョンの問題というのがあります。
Excel VBAのプログラム文を見てみましょう。
Sub 日付抽出()
Range("a1").AutoFilter field:=1, Criteria1:=DateValue("2019/4/21")
End Sub
このプログラム文を説明すると、
AutoFilter field:=1
これは、フィールドの1番目でフィルターを実行しますという行ですね。
1番目なので、日付のA列ということですね。
Criteria1:=DateValue("2019/4/21")
Criteriaは、条件のことですね。
Excel2003のDSUM関数などの、
データベース関数では、お馴染みの引数でした。
そして、DateValueが2019/4/21なので、
2019/4/21だったら抽出してね。
ということです。
今回は3件抽出されるはずです。
では、実行してみましょう。
アレ!抽出されませんでした?
実は、このマクロを実行したExcelはExcel2013なのです。
つまり、
Sub 日付抽出()
Range("a1").AutoFilter field:=1, Criteria1:=DateValue("2019/4/21")
End Sub
は、Excel2007までは、このプログラム文でよかったのですが、
Excel2010以降で実行すると、抽出することができません。
失敗しちゃうのです。
原因は、
オートフィルターの機能がExcel2010で大幅に変わったからです。
なので、もし、古いExcelファイルをExcel2010以降で使用すると、
このように「なぜ?」ということが起こりますので、注意が必要です。
では、Excel2010以降ではどのようにしたらいいのかというと、
Sub 日付抽出()
'Range("a1").AutoFilter field:=1, Criteria1:="2019/4/21"
End Sub
DateValueを使わないで実行してみましょう。
このようにきちんと抽出することができました。
【表示形式を合わす必要がある】
先ほどの抽出条件を年月日に替えてみたら、抽出することが出来るのでしょうか?
Sub 日付抽出()
'Range("a1").AutoFilter field:=1, Criteria1:="2019年4月21日"
End Sub
では実行してみましょう。
抽出してくれません。シリアル値とは関係ないわけですね。
なので、データを年月日の表示形式に替えておいて、実行してみると、
抽出に成功しました。
なので、データを外部から読み込んできた場合に、
日付の表示形式を統一しておく必要があります。
【今年の抽出はThisYear。2月はFebruray ?で合っている!】
日付のフィルターには、今年など様々な条件をつけて抽出することができます。これは、Excel2010以降のフィルターに追加された機能なので、
Excel2007以前では対応しません。
では、今年のデータを抽出する場合のプログラム文を確認しておきましょう。
Sub 日付抽出()
Range("a1").AutoFilter field:=1, Operator:=xlFilterDynamic, Criteria1:=xlFilterThisYear
End Sub
では、実行してみましょう。
問題なく抽出することができましたね。
では、2月のデータを抽出してみましょう。
プログラム文はこうなります。
Sub 日付抽出()
'Range("a1").AutoFilter field:=1, Operator:=xlFilterDynamic, Criteria1:=xlFilterAllDatesInPeriodFebruray
End Sub
では、実行してみましょう。
無事に抽出することができましたね。
といいたいところなのですが、
英語を少し知っている方だと、違和感ありますよね。
Criteria1:=xlFilterAllDatesInPeriodFebruray
の、『Februray』。
そうなんです。スペルがおかしいのです。
2月は、『February』なはずですが、aとrが逆が正解なんですね!
全く持って不思議なのですが、スペルミスが正解。
なぜなんだか?
そこで、今後修正することがあれば、
直さないといけなくなりますが、修正することはないと思いますので、
ずっとスペルミスのままですね。
ということで、
日付の抽出には、クセが強いので、注意してください。