- ベストアンサー
オートフィルタをマクロで書いた際の条件指定についての問題
- オートフィルタをマクロで書いた際に、条件指定の方法に問題があります。特にA1:I3の条件指定に関して、2行目と3行目にそれぞれ条件があった場合は、2行目のAND条件検索と3行目のまたは条件検索ができるようにしたいです。
- 現在のマクロでは、条件がない場合にはすべてのデータが抽出されてしまう問題があります。
- 条件列をI3までにして、2行目と3行目に条件を書くと、条件がある場合にはちゃんと該当するデータが抽出されますが、条件がない場合にはすべてのデータが抽出されてしまいます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>CriteriaRange:=Worksheets("抽出").Range("A1:I2") ここを以下のように変更する。 Sheets(2).Range("A1:I" & myRow1).AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Sheets("抽出").Range("A1").CurrentRegion, _ CopyToRange:=Sheets("抽出").Range("A5"), Unique:=False なお、Sheets(2)もIndex番号ではなくちゃんとシート名にした方がいいかと。 以上です。
その他の回答 (1)
- MackyNo1
- ベストアンサー率53% (1521/2850)
フィルタオプションの検索条件範囲を自動的に検出したいということでしょうか? その場合は、myRow1の部分を以下のように変更してみてください。 myRow1 = Sheets(2).Range("A1").CurrentRegion.Rows.Count
お礼
なんとかできるようになりました。 いろいろとご指導ありがとうございました。 少しづつ自分でも勉強していきます!!
補足
ご指示ありがとうございます。 フィルタオプションの検索条件範囲を自動的に検出したいということでしょうか? そうです。下記のRange("A1:I2")のところをI3にしてしまうと3行目に何も入ってないと 全データがでてきてしまいますので、範囲が("A1:I3")になっていて3行目に何も入っていなければ 2行目のみで検索。3行目に何か書いてあれば2・3行目を使って検索をさせたいのです。 または自動的に条件が入っているかどうかを判断して検索するようなことをしたいのです。 別に下記の記述にこだわっているわけではないのですが・・・。 myRow1 = Sheets(2).Range("A1").CurrentRegion.Rows.Count はmyRow1,myRow2と記述している一番冒頭に書くのでしょうか? 書いてみたのですがうまくいきません。 これはシート2に入っているデータの行の最終行という意味ではないのでしょうか? Sheets(2).Range("A1:I" & myRow1).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Worksheets("抽出").Range("A1:I3"), CopyToRange:=Sheets("抽出").Range("A5"), Unique:=False お手数ですがご指導よろしくおねがいいたします。
お礼
ご親切にありがとうございました。 ちゃんと動くようになり感動しています。 勉強になります!!!