ExcelのVBA(エクセル マクロ)でAdvancedFilterを用いる際、うまい具合に複数の条件を用いてデータを抽出する方法について解説します。
AdvancedFilterは以下のように使用します。
Range("A7:E17").CurrentRegion.AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Range("B1:E3"), _
Unique:=False
この時良くわからないのが、CriteriaRangeで指定する「AND条件」と「OR条件」の記述の仕方です。
(自分は分かりませんでした。)
結論から言うと、
AND条件は横に一行にまとめて書く
OR条件は縦に並べて書く
ということです。
例えば以下のような社員の表からデータを抽出することを考えます。
ここで、
(年収が1000万円 AND 年収が800万円) OR (住所が青山 AND 性別が男)
という条件で抽出したい場合、上記のコードのようにCriteriaRangeで”B1:E3″を指定してやると、
以下のように目的のデータを抽出できます。
ここで、抽出条件にしていした「”B1:E3″」を細かく見てみます。
項目はヘッダで一括で管理して、縦方向に条件式(囲われた部分)がORでつながっていくという感じです。
OR条件は縦に増やしていき、AND条件は横増やしていきましょう。
以下に条件例をいくつかあげます。
- (年収が「1000」 AND 性別が「男」) OR (年収が「1000」 AND 性別が「女」)
⇒CriteriaRange:=Range(“B1:E3”)として
- (年収が「1000」 AND 性別が「男」) OR (年収が「1000」 AND 性別が「女」)
OR (年収が「500」 AND 住所が「秋葉原」)
⇒CriteriaRange:=Range(“B1:E4”)として
一般化すると以下のような形になります。
項目x | 項目y | 項目z | … | |
条件式1 | x1 | y1 | z1 | |
条件式2 | x2 | y2 | z2 | |
… |
といった表を指定すると、
条件式1(x1 AND y1 AND z1 AND …)
OR 条件式2(x2 AND y2 AND z2 AND…)
OR …
という感じです。
ちょっと難しいですよね。
コメントを残す