VB.NET EXCEL操作 フィルター設定

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

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

VB.NET EXCEL操作 新規ブック作成
VB.NET EXCEL操作 値入力
VB.NET EXCEL操作 罫線を引く
VB.NET EXCEL操作 背景色を付ける

フィルターの設定 AutoFilter

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

sheet.Rows(1).AutoFilter()

結果

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

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

フィルターの値指定

ここからは指定した値でフィルターをしたEXCELを出力する方法を紹介します。

フィルターの値指定

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

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

sheet.Rows(1).AutoFilter(Field:=3, Criteria1:="60")

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

結果

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

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

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

sheet.Rows(1).AutoFilter(Field:=3, Criteria1:="60", Operator:=Excel.XlAutoFilterOperator.xlOr, Criteria2:="80")

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

結果

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

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

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

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

Dim arr_fil As String()
arr_fil = {"60", "70", "80"}
sheet.Rows(1).AutoFilter(Field:=3, Criteria1:=arr_fil, Operator:=Excel.XlAutoFilterOperator.xlFilterValues)

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

結果

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

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

フィルターの範囲指定

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

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

sheet.Rows(1).AutoFilter(Field:=3, Criteria1:=">=80")

解説

「Criteria1:=」に>=80と指定することで、80以上の値に絞ることができます。

結果

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

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

sheet.Rows(1).AutoFilter(Field:=3, Criteria1:=">=60", Operator:=Excel.XlAutoFilterOperator.xlAnd, Criteria2:="<=80")

解説

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

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

 

サンプルソース

Imports Microsoft.Office.Interop

Public Class frmExcel
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        'EXCEL変数
        Dim excelApp As New Excel.Application()
        Dim excelBooks As Excel.Workbooks = excelApp.Workbooks
        Dim excelBook As Excel.Workbook = excelBooks.Add()
        Dim sheet As Excel.Worksheet = excelApp.Worksheets("sheet1")

        Try

            excelApp.Visible = False

            'ヘッダー作成
            sheet.Cells(1, 1) = "名前"
            sheet.Cells(1, 2) = "身長"
            sheet.Cells(1, 3) = "体重"
            sheet.Cells(1, 4) = "メモ"

            '明細作成
            Dim arr_detail(3, 3) As Object
            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) = "おはよう"

            Dim range As Excel.Range = Nothing
            range = sheet.Range(sheet.Cells(2, 1), sheet.Cells(5, 4))
            range.Value = arr_detail

            'sheet.Rows(1).AutoFilter()

            'sheet.Rows(1).AutoFilter(Field:=3, Criteria1:="60")
            'sheet.Rows(1).AutoFilter(Field:=3, Criteria1:="60", Operator:=Excel.XlAutoFilterOperator.xlOr, Criteria2:="80")

            'Dim arr_fil As String()
            'arr_fil = {"60", "70", "80"}
            'sheet.Rows(1).AutoFilter(Field:=3, Criteria1:=arr_fil, Operator:=Excel.XlAutoFilterOperator.xlFilterValues)


            'sheet.Rows(1).AutoFilter(Field:=3, Criteria1:=">=80")
            sheet.Rows(1).AutoFilter(Field:=3, Criteria1:=">=60", Operator:=Excel.XlAutoFilterOperator.xlAnd, Criteria2:="<=80")

            excelBook.SaveAs("D:\NewExcelBook.xlsx")

            MessageBox.Show("処理完了")

        Catch ex As Exception
            Throw
        Finally
            excelApp.Quit()
            Call System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
            Call System.Runtime.InteropServices.Marshal.ReleaseComObject(excelBook)
            Call System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
        End Try
    End Sub
End Class

 

まとめ

今回は、フィルターを指定する方法を紹介しました。

あまり使うことはないかもしれませんが、実際に業務で使用することがあったので、紹介しておきます。

 

VB.NETの記事一覧

おすすめの記事