この記事では、VBAを使用し複数条件(3つ以上)がある場合のオートフィルター処理について解説します。
「複数条件(3つ以上)の場合」としているのは、条件が2つまでの場合と3つ以上の場合では処理の方法が異なるためです。
3つ以上の条件を指定する場合には、「配列」を使います。
条件が1つまたは2つの場合のマクロでのオートフィルター処理方法はこちらの記事で紹介しております。
-
【ExcelVBA】マクロでオートフィルターをかける方法を紹介
続きを見る
配列とは?
複数条件のオートフィルター処理について解説する前に、まず配列について簡単に説明していきます。
基本的にVBAで変数を使用する場合、一つの変数には一つの値しか格納することができません。
ただし、配列を使うことで変数を一つ一つ定義するのではなく、まとめて定義することが可能となります。
文章だけでは分かりづらいので実際に見てみましょう。
●通常の変数で定義した場合
Dim pref1 As String
Dim pref2 As String
Dim pref3 As String
pref1="りんご"
pref2="みかん"
pref3="ぶどう"
通常、変数で定義する場合には、上記のように格納したい果物の数(ここでは「りんご」「みかん」「ぶどう」の3つ)だけ変数で定義する必要があります。
では次に配列を使って定義した場合にどのようなコードになるか見てみましょう。
●配列を使って定義した場合
Dim pref(2) As String
pref(0)="りんご"
pref(1)="みかん"
pref(2)="ぶどう"
いかがでしょうか。通常の変数で定義した場合とは異なり、変数に括弧があり、0、1、2と番号が振られているのが分かります。
このように同じ目的で使用する変数(今回は果物)を一つ一つ定義するのではなく、ひとつの変数名に対して複数の領域を確保して括弧の中に番号を振って区別する方法でまとめて定義することができます。
なんとなく配列の使い方が分かったところで、次に本題のオートフィルターの処理について説明していきます。
複数条件(3つ以上)の場合のオートフィルター処理
今回は、この表の中の「りんご」「みかん」「ぶどう」の3つだけが表示されるように条件指定をしてみたいと思います。
使うコードはこちら:
Sub test()
Dim ccArray(2) As String
ccArray(0) = "りんご"
ccArray(1) = "みかん"
ccArray(2) = "ぶどう"
Sheet1.Range("A1:B8").AutoFilter field:=2, Criteria1:=ccArray, Operator:=xlFilterValues
End Sub
配列ccArrayをつくり、「りんご」「みかん」「ぶどう」をそれぞれ番号を振って格納していきます。
オートフィルターをかけるには、Autofilterを使います。
品目は2列目にあるので、「field:=2」を指定、「Criteria1:=ccArray」として配列ccArrayを渡します。「Operator:=xlFilterValues」はこのままでOK
これを実行すると、
NO.4のいちご、NO.5のすいかが非表示となり、3つ条件を指定した「りんご」「みかん」「ぶどう」が表示されました。
配列が使えるようになると、各段にVBAでできることが増えるので覚えていて損はありません。
一つずつ着実に覚えていきましょう!
最後まで見ていただきありがとうございます。