Excelのフィルタ作業では「1つの条件」だけでなく、複数条件を組み合わせてデータを抽出したい場面がよくあります。
VBAの AutoFilter を使えば、簡単に OR条件 や AND条件 を実現できます。
1. OR条件でフィルタをかける
次のような商品データを想定します。
商品名 | 地域 | 売上 |
---|---|---|
A商品 | 東京 | 120 |
B商品 | 大阪 | 80 |
C商品 | 東京 | 150 |
D商品 | 名古屋 | 60 |
E商品 | 福岡 | 40 |
OR条件は「いずれかに一致するデータ」を抽出する方法です。
たとえば、「地域が東京 または 大阪」のデータを表示する場合は次のように書きます。
Sub フィルタ_OR条件()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'地域列(2列目)で「東京」または「大阪」
ws.Range("A1:C5").AutoFilter _
Field:=2, _
Criteria1:="東京", _
Operator:=xlOr, _
Criteria2:="大阪"
End Sub
ポイント
Criteria1
とCriteria2
を指定Operator:=xlOr
で OR条件 にする
この場合、「東京」または「大阪」の行が抽出されます。
商品名 | 地域 | 売上 |
---|---|---|
A商品 | 東京 | 120 |
B商品 | 大阪 | 80 |
C商品 | 東京 | 150 |
2. AND条件でフィルタをかける
AND条件は「両方の条件を満たすデータ」を抽出する方法です。
数値条件で使うことが多く、例えば「売上が100以上 かつ 150以下」のデータを表示する場合は次のように書きます。
Sub フィルタ_AND条件()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'売上列(3列目)で 100以上かつ150以下
ws.Range("A1:C5").AutoFilter _
Field:=3, _
Criteria1:=">=100", _
Operator:=xlAnd, _
Criteria2:="<=150"
End Sub
ポイント
Operator:=xlAnd
で AND条件 にする- 範囲指定のように使える(100~150の間など)
商品名 | 地域 | 売上 |
---|---|---|
A商品 | 東京 | 120 |
C商品 | 東京 | 150 |
3. 配列を使った複数条件(IN句のように使う)
ExcelのAutoFilterは、配列を使って「いくつかの値の中から一致するもの」を抽出することも可能です。
この場合、条件は OR条件 で解釈されます。
例:「地域が東京、大阪、名古屋のいずれか」を表示する場合
Sub フィルタ_配列条件()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'地域列(2列目)で「東京」「大阪」「名古屋」
ws.Range("A1:C5").AutoFilter _
Field:=2, _
Criteria1:=Array("東京", "大阪", "名古屋"), _
Operator:=xlFilterValues
End Sub
商品名 | 地域 | 売上 |
---|---|---|
A商品 | 東京 | 120 |
B商品 | 大阪 | 80 |
C商品 | 東京 | 150 |
D商品 | 名古屋 | 60 |
5. まとめ
- OR条件:
Operator:=xlOr
- AND条件:
Operator:=xlAnd
- 複数の文字列条件:
Criteria1:=Array(...), Operator:=xlFilterValues
これらを組み合わせることで、柔軟なデータ抽出が可能になります。
コメント