AutoFilterメソッドの絞り込み


日付のグループ化」でも書きましたが、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」で登録されてます。

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