黙々とC#

"In a mad world of VBA, only the mad are sane" 『VBAという名の狂った世界で狂っているというのなら私の気は確かだ』

オートフィルタ

本記事は、Excel C# Script入門講座の1記事です。

オートフィルタ

Excelのオートフィルタ機能を利用して、データを抽出するには、データの抽出元を示すRangeオブジェクト(*)を用意し、当該RangeオブジェクトのAutoFilterメソッドを使用します。引数により抽出条件を設定できます。

(*) Rangeオブジェクトは、データの抽出範囲全体を示すものでなくても、Excelが自動的にフィルタの対象範囲を判定します。

AutoFilterメソッドの構文

(Rangeオブジェクト).AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown )

AutoFilterメソッドの戻り値

何かの値が戻ってくるが、使うことはないと思われる。(未確認)

AutoFilterメソッドの引数

引数名 必須 / オプション 内容
Field 省略可能 フィルターの対象となるフィールド番号を指定します。
Criteria1 省略可能 抽出条件となる文字列を指定します。
Operator 省略可能 フィルターの種類を指定します。
Criteria2 省略可能 2番目の抽出条件となる文字列を指定します。
VisibleDropDown 省略可能 オートフィルタのドロップダウン矢印(▼)を表示するか否かを指定します。
引数Field

フィールド番号は、リストの左側から何番目かを指定します。

つまり、最も左側にあるフィールドはフィールド番号 1 になります。

引数Criteria1, Criteria2

通常、抽出条件とする文字列(例えば「りんご」)を指定します。

"=" と指定すると、空白セルが抽出され、"<>" と指定すると空白以外のフィールドが抽出されます。

"A"と指定すると、Aに後方一致する場合、"A"と指定すると、Aに前方一致する場合、"A"と指定すると、Aに部分一致する場合が抽出されます。

また、数値の場合は、不等号(">"や"<", "<=", ">=")を先頭に付けて範囲指定することができます。

この引数を省略すると、抽出条件は All になります。

引数 Operator に xlTop10Items が指定されている場合は、引数 Criteria1 に項目数を指定します (たとえば "10")。

なお、Criteria2 を指定できるか否かは、引数Operatorに何を指定するかで決まります。

引数Operator

XlAutoFilterOperator 列挙型を指定します。

名前 説明
xlAnd 1 Criteria1 とCriteria2 の論理演算子 AND
xlBottom10Items 4 表示される最低値項目 (Criteria1 で指定される項目数)
xlBottom10Percent 6 表示される最低値項目 (Criteria1 で指定される割合)
xlFilterCellColor 8 セルの色
xlFilterDynamic 11 日付の範囲を指定したい場合。Criteria1には XlDynamicFilterCriteria列挙型を指定する。
xlFilterFontColor 9 フォントの色
xlFilterIcon 10 フィルター アイコン
xlFilterValues 7 Criteria1 を配列で指定する場合に指定する。なお、日付を配列で指定したい場合は、Criteria2を指定する。
xlOr 2 Criteria1 またはCriteria2 の論理演算子 OR
xlTop10Items 3 表示される最高値項目 (Criteria1 で指定される項目数)
xlTop10Percent 5 表示される最高値項目 (Criteria1 で指定される割合)
引数VisibleDropDown

trueまたはfalseを指定します。

trueを指定すると、オートフィルタ処理を実行した時にドロップダウン矢印が表示されます。

デフォルト値はtrueです。

全ての引数を省略した場合

フィルタ処理は行わず、オートフィルタのドロップダウン矢印を表示します。

サンプルコード

//Sheet1のA1セルを含む適当な範囲にオートフィルタを設定(ドロップダウン矢印を表示)する。
Excel.Worksheets("Sheet1").Cells(1, 1).AutoFilter();

f:id:d_ymkw:20160805201448p:plain

//フィールド番号5(E列)の値が50以下のデータを抽出
Excel.Worksheets("Sheet1").Cells(1, 1).AutoFilter(Field:5, Criteria1:"<20");
//フィールド番号5(E列)の中から40以上60未満の条件に一致するデータを抽出
var range = Excel.Worksheets("Sheet1").Cells(1, 1);
range.AutoFilter(Field:5, Criteria1:"<60", Operator:1, Criteria2:">=40");

f:id:d_ymkw:20160805201550p:plain

以下の例では、抽出条件を3つ以上指定しています。この場合、引数Operatorに XlFilterValue(7)を指定し、Criteria1に配列を指定します。なお、XlFilterValueはExcel2007以降でのみ利用可能です。

//フィールド番号8(H列)の中から、愛媛県、岡山県、茨城県のいずれかに一致するデータを抽出
var range = Excel.Worksheets("Sheet1").Cells(1, 1);
range.AutoFilter(Field:8, Criteria1:new []{"愛媛県","岡山県","茨城県"}, Operator:7);

f:id:d_ymkw:20160805202155p:plain