C# EXCEL操作 フィルター設定

C#からEXCELにフィルターを設定する方法を紹介していきます。

他にもEXCEL操作関係の記事を記載していますので、参考にしてみてください。

C# EXCEL操作 新規ブック作成
C# EXCEL操作 値の入力
C# EXCEL操作 罫線の引き方
C# EXCEL操作 背景色変更

フィルターの設定 AutoFilter

フィルターの設定方法は、下記のようになります。

sheet.Rows[1].AutoFilter();

指定した行(1行目)にオートフィルターを指定することができましたね。

フィルターの設定は以上です。

フィルターの値指定

指定した値でフィルターをした状態でEXCEL出力をしてみましょう。

フィルターの値指定

まずは、1つの値を指定してみましょう。

上の画像のEXCELデータを対象に「体重=60」でフィルターをかけてみます。

sheet.Rows[1].AutoFilter(3, "60");

解説
「第1引数」に対象の列を指定します。今回は「体重」にかけたいので、3列目です。
「第2引数」にフィルターをする値を指定しましょう。

結果

フィルター2つの値を指定 

先ほどは1つ値を指定しましたが、次は値を2つ指定してみましょう。

「体重=60」「体重=80」を指定してみましょう。

sheet.Rows[1].AutoFilter(3, "60", Excel.XlAutoFilterOperator.xlOr, "80");

解説
「第1引数」に対象の列を指定します。今回は「体重」にフィルターをかけたいので、3列目です。
「第2引数」にフィルターをする値を指定しましょう。
「第3引数」Excel.XlAutoFilterOperator.xlOr は Criteria1とCriteria2を「Or」条件でフィルターをかけます。
「第4引数」2つ目の値を指定しましょう。

フィルターを複数の値で指定する

2つ以上の値を指定する場合の方法を紹介していきます。

配列を使うことで複数の値に対応することができます。

「体重=60」「体重=70」「体重=80」を指定してみましょう。

string[] arr_fil = { "60", "70", "80" };
sheet.Rows[1].AutoFilter(3, arr_fil, Excel.XlAutoFilterOperator.xlFilterValues);

解説
1行目:フィルターをかけたい値の配列を作成する。
2行目
「第1引数」に対象の列を指定します。今回は「体重」にかけたいので、3列目です。
「第2引数」に先ほど作成した配列を指定します。
「第3引数」Excel.XlAutoFilterOperator.xlFilterValues 複数の値に対してフィルターをかけます。

2つ以上の値をフィルターすることができました。

この方法なら配列に値を指定するだけで、いくつでも対応することできますね。

フィルターの範囲指定

先ほどまでは、値の指定方法でしたが範囲指定でフィルターをかけてみましょう。

「体重>=80」のデータに絞ってみましょう。

sheet.Rows[1].AutoFilter(3, ">=80");

解説

第2引数」に>=80と指定することで、80以上の値に絞ることができます。

結果

フィルターの範囲指定 2つ

続いて、「体重>=60」かつ「体重<=80」のデータに絞ってみましょう。

sheet.Rows[1].AutoFilter(3, ">=60", Excel.XlAutoFilterOperator.xlAnd, "<=80");

解説

「Criteria1:=」に1つ目の条件を設定 「>=60」
「Operator:=」Excel.XlAutoFilterOperator.xlAnd は Criteria1とCriteria2を「And」条件でフィルターをかけます。
「Criteria2:=」2つ目の条件を指定 「<=80」

結果

指定した範囲のデータが表示されていますね。

サンプルソース

using System;
using System.Drawing;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace c_sharp
{
    public partial class frmExcel : Form
    {
        public frmExcel()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application excelApp = new Excel.Application();
            Excel.Workbooks excelBooks = excelApp.Workbooks;
            Excel.Workbook excelBook = excelBooks.Add();
            Excel.Worksheet sheet = excelApp.Worksheets["sheet1"];

            try
            {

                excelApp.Visible = false;

                //ヘッダー作成
                sheet.Cells[1, 1].value = "名前";
                sheet.Cells[1, 2].value = "身長";
                sheet.Cells[1, 3].value = "体重";
                sheet.Cells[1, 4].value = "メモ";

                object[,] arr_detail = new object[4, 4];
                arr_detail[0, 0] = "田中";
                arr_detail[0, 1] = "160";
                arr_detail[0, 2] = "60";
                arr_detail[0, 3] = "おはよう";

                arr_detail[1, 0] = "鈴木";
                arr_detail[1, 1] = "170";
                arr_detail[1, 2] = "70";
                arr_detail[1, 3] = "こんにちは";

                arr_detail[2, 0] = "山本";
                arr_detail[2, 1] = "180";
                arr_detail[2, 2] = "80";
                arr_detail[2, 3] = "こんばんは";

                arr_detail[3, 0] = "松本";
                arr_detail[3, 1] = "190";
                arr_detail[3, 2] = "90";
                arr_detail[3, 3] = "おはよう";

                Excel.Range range;
                range = sheet.Range[sheet.Cells[2, 1], sheet.Cells[5, 4]];
                range.Value = arr_detail;

                sheet.Rows[1].AutoFilter();
                //sheet.Rows[1].AutoFilter(3, "60");
                //sheet.Rows[1].AutoFilter(3, "60", Excel.XlAutoFilterOperator.xlOr, "80");

                //string[] arr_fil = { "60", "70", "80" };
                //sheet.Rows[1].AutoFilter(3, arr_fil, Excel.XlAutoFilterOperator.xlFilterValues);

                //sheet.Rows[1].AutoFilter(3, ">=80");

                //sheet.Rows[1].AutoFilter(3, ">=60", Excel.XlAutoFilterOperator.xlAnd, "<=80");

                excelBook.SaveAs("D:\\NewExcelBook_csharp.xlsx");
            }
            catch
            {
                throw;
            }
            finally
            {
                excelApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelBook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
            }

        }
    }
}

 

まとめ

今回は、C#でEXCELにフィルターをかける方法を紹介しました。

sheet.Rows[1].AutoFilter();

基本的にはこの形でフィルターを付けることができます。

細かい設定をしたいときは、引数を設定していきましょう。

 

C#の記事一覧

おすすめの記事