ous">

小さな在庫管理

在庫管理導入からシステム作成まで詳細解説!

VBA 抽出処理 AutoFilter メソッドについて詳細解説! [VBA関連解説#15]

この記事では、VBAでの抽出処理に使用する、AutoFilterメソッドの使用方法を解説します。

基本的な記述方法から、使用方法・抽出結果の加工例まで、例示しながら解説していきます。


VBA関連解説

Excelのオートフィルター機能

AutoFilterメソッドは、Excelのオートフィルターの抽出機能を再現したものともいえます。
Excelのオートフィルターはデータタブの並べ替えとフィルターにある、フィルターボタンで設定できます。

フィルターボタンをクリックすると、リストのヘッダー部に矢印ボタンが表示されます。

矢印ボタンをクリックすると、オートフィルター機能が使用できます。

VBAでは、これらのオートフィルター機能のうち抽出に関する機能が、AutoFilterメソッドで再現できます。

 

AutoFilterメソッドの構文

VBAでは、データの抽出にAutoFilterメソッドを使用します。

基本構文

AutoFilret メソッドは、リストデータを指定の条件で抽出します。

AutoFilter 構文

Range("A1").AutoFilter Field, Criteria1, Operator, Criteria2

構文例では、Range("A1")を指定していますが、指定するセルは、リストデータの中のセルを指定すれば、表全体にオートフィルターが設定されます。


引数の設定は下表のようになります。

AutoFilter 引数

AutoFilter 引数設定表

 

使用方法

使用方法については、下記サンプルを実際に処理した結果とともに解説します。

抽出サンプル

設定解除

AutoFilter 設定解除

Sub AutoFilter_SET()

Range("A1").AutoFilter

End Sub

.AutoFilterを記述すると、オートフィルターが設定されてない時は設定し、設定されている時は解除するコードとなります。

基本例

AutoFilter 基本例

Sub AutoFilter_BASE()

Range("A1").AutoFilter 1, "山田"

End Sub

抽出結果

上記コードは、1列目を山田で抽出する、AutoFilterメソッドの最もシンプルな例です。
引数は左から順に指定していきますので、引数名は省略しています。

あいまい条件

AutoFilter あいまい条件

Sub AutoFilter_WILD()

Range("A1").AutoFilter 1, "*田*"

End Sub

抽出結果

上記コードは、1列目を田を含むで抽出する、AutoFilterメソッドの例です。
サンプルのように、条件にはワイルドカードが使用可能です。

AND条件

AutoFilter AND条件

Sub AutoFilter_AND()

Range("A1").AutoFilter 2, ">=80", xlAnd, "<=85"

End Sub

抽出結果

上記コードは、2列目を80以上かつ85以下で抽出する、AutoFilterメソッドの例です。
引数 Operator には xlAnd を指定します。

OR条件

AutoFilter OR条件

Sub AutoFilter_OR()

Range("A1").AutoFilter 1, "太田", xlOr, "田中"

End Sub

抽出結果

上記コードは、1列目を太田または田中で抽出する、AutoFilterメソッドの例です。
引数 Operator には xlOr を指定します。

複数条件

AutoFilter 複数条件

Sub AutoFilter_配列()
Dim A(2) As String

A(0) = "佐藤"
A(1) = "鈴木"
A(2) = "斎藤"

Range("A1").AutoFilter 1, A, xlFilterValues

End Sub

抽出結果

上記コードは、配列を使用して複数条件で抽出する、AutoFilterメソッドの例です。
引数 Operator には xlFilterValuesを指定します。

 

抽出結果の加工例

件数の取得

AutoFilter 件数

Sub AutoFilter_COUNT()

Range("A1").AutoFilter 1, "*田*"
Range("D2").Value = WorksheetFunction.Subtotal(3, Range(Cells(1, 2), Cells(Rows.Count, 2).End(xlUp))) - 1
Range("A1").AutoFilter

End Sub

抽出結果

上記コードは、1列目を田を含むで抽出し、D2セルに件数を出力する例です。
SUBTOTAL関数は引数3で件数を計算します。ヘッダーもカウントされるので、結果を-1します。
3行目の .AutoFilter でオートフィルターを解除します。

合計の取得

AutoFilter 合計

Sub AutoFilter_TOTAL()

Range("A1").AutoFilter 1, "*田*"
Range("D2").Value = WorksheetFunction.Subtotal(9, Range(Cells(1, 2), Cells(Rows.Count, 2).End(xlUp)))
Range("A1").AutoFilter

End Sub

抽出結果

上記コードは、1列目を田を含むで抽出し、D2セルに合計を出力する例です。
SUBTOTAL関数は引数9で合計を計算します。
3行目の .AutoFilter でオートフィルターを解除します。

平均の取得

AutoFilter 平均

Sub AutoFilter_AVERAGE()

Range("A1").AutoFilter 1, "*田*"
Range("D2").Value = WorksheetFunction.Subtotal(1, Range(Cells(1, 2), Cells(Rows.Count, 2).End(xlUp)))
Range("A1").AutoFilter

End Sub

抽出結果

上記コードは、1列目を田を含むで抽出し、D2セルに平均を出力する例です。
SUBTOTAL関数は引数1で平均を計算します。
3行目の .AutoFilter でオートフィルターを解除します。

抽出結果のコピー

AutoFilter COPY

Sub AutoFilter_COPY()

Range("A1").AutoFilter 1, "*田*"
Range("A1").CurrentRegion.Copy Range("D1")
Range("A1").AutoFilter

End Sub

抽出結果

上記コードは、1列目を田を含むで抽出し、D1セルを基準に抽出結果を出力する例です。
CurrentRegion を使用し抽出結果の表全体を選択することがポイントです。
3行目の .AutoFilter でオートフィルターを解除します。

 

詳細設定(フィルターオプション)

オートフィルターでは、データを直に加工して抽出結果を取得しますが、データを直接加工したくない場面もあります。
そこで、抽出領域を作成して抽出結果を取得する方法として、詳細設定(フィルターオプション)の機能があります。

 
下記の記事では、フィルターオプションの使用方法を解説していますので、参考にしてください。
www.minizaiko.com
 

概要解説に戻る