3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(.Net)C#からExcelへの遅延バインディングで、オートフィルタを設定する

(.Net)C#から遅延バインディングでExcelファイルに読み書きするで、C#からExcelへ遅延バインディングを使ったアクセスを書きましたが、今回はオートフィルタを設定する方法です。

Rangeオブジェクトの AutoFilter メソッドで設定できます。

例えば、A1:B5の範囲で、A列の値が3より大きいという条件のオートフィルタを指定するには以下のようにします。 (シートオブジェクトまでは生成していることとします。)

//oSheetはシートオブジェクト
object oRange=null;


//オートフィルタ
oRange = oSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null
    , oSheet, new object[] { "A1:B5", Missing.Value });
oRange.GetType().InvokeMember("AutoFilter", BindingFlags.InvokeMethod, null
    , oRange, new object[] {
         1,              //Field:フィルタの対象となるフィールド番号を整数で指定。フィールド番号はリストの左側から始まるので、一番左側は1となる。
         ">3"  ,         //Criteria1:省略可能。条件を指定。(後述)
         1  ,            //Operator:省略可能。XlAutoFilterOperator 列挙型の定数を指定(後述)
         Missing.Value  ,//Criteria2:省略可能。 2番目の抽出条件となる文字列を指定。
         Missing.Value   //VisibleDropDown:省略可能。 true=ドロップダウン矢印表示。 false:矢印非表示。
});

第二引数のCriteria1で条件を文字列で指定するわけですが、以下の様な指定ができるようです。

省略時 : 全てが対象。
"任意の文字列" : その文字列に一致するものをフィルタする。
"=" : 空白セルが抽出。
"<>;" : 空白以外が抽出。
">3" : 3より大きい値。
"<=5" : 5以下の値

Operatorは、Criteria1とCriteria2の複数の条件の関係を指定するわけですが、以下の定数が利用できます。

値 定数名      意味
1 xlAnd(デフォルト)   Criteria1 と Criteria2 の AND 条件。
2 xlOr                Criteria1 と Criteria2 の OR 条件
3 xlTop10Items        表示されている最大値の項目 (Criteria1 で指定した項目数)
4 xlBottom10Items     表示されている最小値の項目 (Criteria1 で指定した項目数)
5 xlBottom10Percent   表示されている最小値の項目 (Criteria1 で指定したパーセンテージ)
6 xlTop10Percent      表示されている最大値の項目 (Criteria1 で指定したパーセンテージ)

参考:
MSDN:Range.AutoFilter メソッド
Excel(エクセル)VBA入門:オートフィルタ(AutoFilter)でのデータ抽出