(.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)でのデータ抽出