【自分用 VBAメモ】Autofilterでフィルタ条件を設定するときにやりがちな間違い
【スポンサーリンク】
相変わらずVBAを書いているのだけど、たまにしか使わない機能はどうやって書くか忘れちゃうこともあって。これどうするんだっけ…?と一瞬悩んだのが、「Autofilter」での複数フィルタ条件の設定方法。AdvancedFilter(いわゆるフィルタオプション)の方が速いのだけど、共有ファイルの場合はAdvancedFilterが使えないので、Autofilterを使う必要があります。
検索してみたら同じように悩んでる方がちらほらいたので、今後のためにメモっておきます。
※Excel2010での方法です。他のバージョンは未確認。
※ブックやシートの指定とかいろいろ省いて書いてます
間違い1
Dim rDataHeader as Range
Dim sFilter as Stringset rDataHeader = [フィルタしたいデータのヘッダ]
sFilter = """" & "条件1" & """" & "," & """" & "条件2" & """"
rDataHeader.Autofilter Field:=1 Criteria1:=sFilter
※["条件1","条件2"]という文字列がsFilterの中に入っている
これだとフィルタ条件が["条件1","条件2"]という文字列そのものになってしまい、思ったとおりにフィルタができない。
間違い2
Dim rDataHeader as Range
Dim sFilter as Stringset rDataHeader = [フィルタしたいデータのヘッダ]
sFilter = """" & "条件1" & """" & "," & """" & "条件2" & """"
rDataHeader.Autofilter Field:=1 Criteria1:=:=Array(sFilter)
試しにArrayをつけてみた。間違い1と同じ結果に。そもそもsFilterは配列じゃない…。
これならうまくいく
Dim rDataHeader as Range
Dim sFilter(1) as Stringset rDataHeader = [フィルタしたいデータのヘッダ]
sFilter(0) ="条件1"
sFilter(1) ="条件2"
rDataHeader.Autofilter Field:=1 Criteria1:=Array(sFilter)
条件1と条件2が独立したフィルタ条件として扱われるので、想定通りフィルタされました。
マクロの自動記録で見てみてもいまいち分かりにくかったので、書いてみました。
Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!Excel2007/2003対応
- 作者: 立山秀利
- 出版社/メーカー: 秀和システム
- 発売日: 2007/10/23
- メディア: 単行本
- 購入: 23人 クリック: 470回
- この商品を含むブログ (20件) を見る
Excel VBA 逆引き辞典パーフェクト 2013/2010/2007/2003対応
- 作者: 田中亨
- 出版社/メーカー: 翔泳社
- 発売日: 2013/11/14
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る