日々のこと

特にありません

【自分用 VBAメモ】Autofilterでフィルタ条件を設定するときにやりがちな間違い


【スポンサーリンク】

相変わらずVBAを書いているのだけど、たまにしか使わない機能はどうやって書くか忘れちゃうこともあって。これどうするんだっけ…?と一瞬悩んだのが、「Autofilter」での複数フィルタ条件の設定方法。AdvancedFilter(いわゆるフィルタオプション)の方が速いのだけど、共有ファイルの場合はAdvancedFilterが使えないので、Autofilterを使う必要があります。

検索してみたら同じように悩んでる方がちらほらいたので、今後のためにメモっておきます。
※Excel2010での方法です。他のバージョンは未確認。
※ブックやシートの指定とかいろいろ省いて書いてます

間違い1 

Dim rDataHeader as Range
Dim sFilter as String

set rDataHeader = [フィルタしたいデータのヘッダ]

sFilter = """" & "条件1" & """" & "," & """" & "条件2" & """"
rDataHeader.Autofilter Field:=1 Criteria1:=sFilter
※["条件1","条件2"]という文字列がsFilterの中に入っている

 これだとフィルタ条件が["条件1","条件2"]という文字列そのものになってしまい、思ったとおりにフィルタができない。

間違い2

Dim rDataHeader as Range
Dim sFilter as String

set rDataHeader = [フィルタしたいデータのヘッダ]
sFilter = """" & "条件1" & """" & "," & """" & "条件2" & """"
rDataHeader.Autofilter Field:=1 Criteria1:=:=Array(sFilter)

 試しにArrayをつけてみた。間違い1と同じ結果に。そもそもsFilterは配列じゃない…。

これならうまくいく

Dim rDataHeader as Range
Dim sFilter(1) as String

set rDataHeader = [フィルタしたいデータのヘッダ]
sFilter(0) ="条件1"
sFilter(1) ="条件2"
rDataHeader.Autofilter Field:=1 Criteria1:=Array(sFilter)

 条件1と条件2が独立したフィルタ条件として扱われるので、想定通りフィルタされました。

 

マクロの自動記録で見てみてもいまいち分かりにくかったので、書いてみました。 

Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!Excel2007/2003対応

Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!Excel2007/2003対応

 
Excel VBA 逆引き辞典パーフェクト 2013/2010/2007/2003対応

Excel VBA 逆引き辞典パーフェクト 2013/2010/2007/2003対応