「日付のグループ化」でも書きましたが、Excel 2007ではオートフィルタに新機能がいくつか追加されています。そのひとつが"日付フィルタ"です。

「今月」や「先週」などを選択するだけで、指定した日付による絞り込みが可能です。ワンタッチで絞り込めるので、ひんぱんに日付を扱うユーザーにとっては朗報でしょう。この"日付フィルタ"は、内部的に"フィルタオプションの設定"を実行しているのだろうと、マクロ記録で調べてみました。すると案の定、RangeオブジェクトのAutoFilterメソッドが記録されました。
AutoFilterメソッドの引数は次の通りです。
Range.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)
Fieldは絞り込む列位置を指定します。条件はCriteria1とCriteria2に指定し、どんな絞り込みを行うかをOperatorに指定します。VisibleDropDownにFalseを指定するとドロップダウン矢印(▼)が非表示になります。
Operatorには次の定数を指定できます。
| 定数 | 値 | 説明 |
|---|---|---|
| xlAnd | 1 | 抽出条件1と抽出条件2の論理演算子AND |
| xlBottom10Items | 4 | 表示される最低値項目(抽出条件1で指定される項目数) |
| xlBottom10Percent | 6 | 表示される最低値項目(抽出条件1で指定される割合) |
| 8 | セルの色 | |
| 11 | 動的フィルタ | |
| 9 | フォントの色 | |
| 10 | フィルタアイコン | |
| 7 | フィルタの値 | |
| xlOr | 2 | 抽出条件1または抽出条件2の論理演算子OR |
| xlTop10Items | 3 | 表示される最高値項目(抽出条件1で指定される項目数) |
| xlTop10Percent | 5 | 表示される最高値項目(抽出条件1で指定される割合) |
太字がExcel 2007で追加された新しい定数です。"日付フィルタ"はOperatorに定数xlFilterDynamicを指定します。たとえば「明日」で絞り込むときは次のようにします。
Sub Sample1()
Range("A1:A7").AutoFilter Field:=1, _
Criteria1:=xlFilterTomorrow, _
Operator:=xlFilterDynamic
End Sub
Operatorに定数xlFilterDynamicを指定して"日付フィルタ"による絞り込みを行うときは、Criteria1に次の定数を指定できます。こちらはヘルプに記載されていません。
| 定数 | 値 | 説明 |
|---|---|---|
| xlFilterToday | 1 | 今日 |
| xlFilterYesterday | 2 | 昨日 |
| xlFilterTomorrow | 3 | 明日 |
| xlFilterThisWeek | 4 | 今週 |
| xlFilterLastWeek | 5 | 先週 |
| xlFilterNextWeek | 6 | 来週 |
| xlFilterThisMonth | 7 | 今月 |
| xlFilterLastMonth | 8 | 先月 |
| xlFilterNextMonth | 9 | 来月 |
| xlFilterThisQuarter | 10 | 今四半期 |
| xlFilterLastQuarter | 11 | 前四半期 |
| xlFilterNextQuarter | 12 | 来四半期 |
| xlFilterThisYear | 13 | 今年 |
| xlFilterLastYear | 14 | 昨年 |
| xlFilterNextYear | 15 | 来年 |
| xlFilterYearToDate | 16 | 今年の初めから今日まで |
| xlFilterAllDatesInPeriodQuarter1 | 17 | 期間内の全日付:第1四半期 |
| xlFilterAllDatesInPeriodQuarter2 | 18 | 期間内の全日付:第2四半期 |
| xlFilterAllDatesInPeriodQuarter3 | 19 | 期間内の全日付:第3四半期 |
| xlFilterAllDatesInPeriodQuarter4 | 20 | 期間内の全日付:第4四半期 |
| xlFilterAllDatesInPeriodJanuary | 21 | 期間内の全日付:1月 |
| xlFilterAllDatesInPeriodFebruray | 22 | 期間内の全日付:2月 |
| xlFilterAllDatesInPeriodMarch | 23 | 期間内の全日付:3月 |
| xlFilterAllDatesInPeriodApril | 24 | 期間内の全日付:4月 |
| xlFilterAllDatesInPeriodMay | 25 | 期間内の全日付:5月 |
| xlFilterAllDatesInPeriodJune | 26 | 期間内の全日付:6月 |
| xlFilterAllDatesInPeriodJuly | 27 | 期間内の全日付:7月 |
| xlFilterAllDatesInPeriodAugust | 28 | 期間内の全日付:8月 |
| xlFilterAllDatesInPeriodSeptember | 29 | 期間内の全日付:9月 |
| xlFilterAllDatesInPeriodOctober | 30 | 期間内の全日付:10月 |
| xlFilterAllDatesInPeriodNovember | 31 | 期間内の全日付:11月 |
| xlFilterAllDatesInPeriodDecember | 32 | 期間内の全日付:12月 |
新機能"日付フィルタ"に関する解説はここまでです。
ところで!上の定数一覧を見て、何か「えっ!?」と驚くことに気づきませんか?先に言っておきますが、私はタイプミスをしていません。
「期間内の全日付:2月」の定数をご覧ください。
xlFilterAllDatesInPeriodFebruaryではなく
xlFilterAllDatesInPeriodFebruray
です。
マクロ記録すると「xlFilterAllDatesInPeriodFebruray」が記録されますし、そもそも「xlFilterAllDatesInPeriodFebruary」という定数は定義されていません。"2月"を表す英単語は確かFebruaryでしたよね(^^;
Googleで「Februray」を検索すると、けっこうヒットします。それだけ間違えやすい綴りということなのかもしれませんが、もしかすると「Februray」という綴りも認容されているのでしょうか。しかし、Excelでは次のように「February」しか表示されません。下図のセルC2は「mmmm」という表示形式で月名を表示しています。セルD2はTEXT関数でやってみました。ダイアログボックスは、マクロで「MsgBox Format("2007/2/1", "mmmm")」を実行した結果です。

また、ユーザー定義リストも「February」で登録されてます。

いったい、どうしたんでしょうね(^^;