• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オートフィルタをマクロで書いたのですが、一部うまくいかなくて困っていま)

オートフィルタをマクロで書いた際の条件指定についての問題

このQ&Aのポイント
  • オートフィルタをマクロで書いた際に、条件指定の方法に問題があります。特にA1:I3の条件指定に関して、2行目と3行目にそれぞれ条件があった場合は、2行目のAND条件検索と3行目のまたは条件検索ができるようにしたいです。
  • 現在のマクロでは、条件がない場合にはすべてのデータが抽出されてしまう問題があります。
  • 条件列をI3までにして、2行目と3行目に条件を書くと、条件がある場合にはちゃんと該当するデータが抽出されますが、条件がない場合にはすべてのデータが抽出されてしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.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番号ではなくちゃんとシート名にした方がいいかと。 以上です。

chanchanko_2010
質問者

お礼

ご親切にありがとうございました。 ちゃんと動くようになり感動しています。 勉強になります!!!

その他の回答 (1)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

フィルタオプションの検索条件範囲を自動的に検出したいということでしょうか? その場合は、myRow1の部分を以下のように変更してみてください。 myRow1 = Sheets(2).Range("A1").CurrentRegion.Rows.Count

chanchanko_2010
質問者

お礼

なんとかできるようになりました。 いろいろとご指導ありがとうございました。 少しづつ自分でも勉強していきます!!

chanchanko_2010
質問者

補足

ご指示ありがとうございます。 フィルタオプションの検索条件範囲を自動的に検出したいということでしょうか? そうです。下記の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 お手数ですがご指導よろしくおねがいいたします。