Excel VBA(エクセル マクロ) 小技集そのC
AdvancedFilterで複数の抽出条件を指定

AdvancedFilterで複数の抽出条件を指定したい。
AND、ORの条件を駆使して思い通りの抽出を行う。

Excel VBAのAdvancedFilterは抽出機能、コピー機能が備わっており、かなり便利だ。

さらに複雑な使い方がある。

AdvancedFilterで複数の抽出条件(AかつB または CかつD等)を指定し、検索可能である。

教科書やインターネットの解説では一つの検索条件で終わっており、複数条件については書かれていないため、自力で複数の抽出条件を指定してフィルタをかけることとした(やり方が間違っていたらコメントしてください)。

AdvancedFilterの構文は以下のとおりである。

Worksheets("データ").Range("A1:P100").AdvancedFilter xlFilterCopy,Worksheets("抽出条件").Range("B1:B2"),CopyToRange:=Worksheets("データ1").Range("A1:B1")

データのA1:P100領域についてB1で指定した題名の列についてB2の値を検索し、データ1のA1,B1に書かれた題名の列についてコピーする機能である。

ここで、検索部分Worksheets("抽出条件").Range("B1:B2")について考える。

シート:抽出条件
  A B
  種類
  りんご


シート:データのA1〜P1の中から種類の列を検索し、種類の列について「りんご」のある行を抽出する。

みかん、いちごも検出したいときはどうするか?

検索部分をWorksheets("抽出条件").Range("B1:B4")として

  A B
  種類
  りんご
  みかん
  いちご

とすれば検索できる。

では店という題名の列で○○商店のみという検索条件を付け加えたい。

検索部分をWorksheets("抽出条件").Range("B1:C4")として

  A B C
  種類
  りんご ○○商店
  みかん ○○商店
  いちご ○○商店

店が○○商店、かつ種類がりんご、みかん、いちごである物が検出された。

さらに日付が2008/1/1〜2008/2/1までの物に絞る。

検索部分をWorksheets("抽出条件").Range("B1:E4")として

 

  A B C D E
  種類 日付 日付
  りんご ○○商店 >=2008/1/1 <=2008/2/1
  みかん ○○商店 >=2008/1/1 <=2008/2/1
  いちご ○○商店 >=2008/1/1 <=2008/2/1

となる。

どうやら、列方向がOR条件で、行がAND条件になっているようだ。

これを見つけ出すのに意外に時間がかかった。

グーグルで検索すると一般的なものが上位検索されて、一つの検索条件のプログラム例しか書かれていない。

覚えておこう。


忍者Admaxのテキスト広告で収入UP!

実践!ExcelデータベースTOP