• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オートフィルタ 最終行を指定する必要は?)

オートフィルタで最終行を指定する必要は?

このQ&Aのポイント
  • エクセルでVBAでオートフィルタをする場合、最終行を指定する必要はあるのでしょうか?
  • VBAを使用してエクセルでオートフィルタを行う際、最終行を取得・指定する必要があるかどうかについて教えてください。
  • オートフィルタを設定する際、どちらの方法がより適切か、最終行の取得・指定が必要なのか教えてください。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

ご提示のサンプル・・と言うかオートフィルタの処理であれば、必要はあまりないと思います。 ただし、途中でまったくの空白行・空白列が挟まってしまう可能性があるなら必要な場合もあります。 (表の範囲は100行あるが、51行目には何も入力されていない、など) 任意のセル(下記はA1セル)を含む「連続する」表範囲を指定するのであれば、   Cells(1, 1).CurrentRegion.Select などのやり方もアリですね。

iwateryokou26
質問者

お礼

Cells(1, 1).CurrentRegion.Select は初めて知りました。ありがとうございました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

実際には、そのサンプルであれば sub macro1()  range("A1").autofilter end sub とするだけで、勝手に右端列・最終行まで自動検知して適切にオートフィルタを取り付けてくれます。 ただし、何らかの理由で「全く空白の空行」「全く空白セルのみの空列」が範囲の中に含まれていた場合を想定して、右端列・最下行をキチンと調べて明示的に指定した方が、より「安全」とは言えます。 またご相談では列範囲も可変を想定していますが、通常は列範囲は既知で、下向け何行目までデータが記入されているかは不定というシチュエーションが大半です。 そういう場合 sub macro2()  range("A:B").autofilter end sub などのようにして、取りこぼしを防ぐ方法もあります。

iwateryokou26
質問者

お礼

A1さえ選択すればいいのですか。 「全く空白の空行」は想定してません。ありがとうございました。

回答No.1

オートフィルタは、列で1つのセルを選択すれば機能するものなので、最終行を考える必要はないと思う。 それとは別に、データの最終行、最終列の割り出し方にギモンあり! A列、行1を基準にする、それはとっても実用的でイイが、未だに、 最終行:Range("a65536").End(xlUp).Row 最終列:Range("IV1").End(xlToLeft).Column を使う人がいる。これでは2007以降の仕様拡張についていけない!! そもそもマジック難波は御法度の筈。 故意に使っているような気もするが、正しくは、 最終行:Cells(Rows.Count, "A").End(xlUp).Row 最終列:Cells(1, Columns.Count).End(xlToLeft).Column 最終行、最終列の検出方法にはさまざまあるようだが、下のリンクの考察は参考になる。 No.8 ワークシートの最終行、最終列を取得する 2007/03/05 http://www.niji.or.jp/home/toru/notes/8.html ワークシートの最終セル(最終行、最終列)を取得する… VBAをはじめた人は誰しも最初に引っかかる問題ではありますが、幸いにもインターネットで検索するといくつもの解決法が見つかります。 ところが…動いたり動かなかったり、想定外の動作をすることがあります。そもそもいくつもの解決法があること自体おかしい、いったい本当の答えはどれ?この際、白黒はっきりさせようじゃないかというのがこのページの趣旨です。

iwateryokou26
質問者

お礼

最終行:Cells(Rows.Count, "A").End(xlUp).Row 最終列:Cells(1, Columns.Count).End(xlToLeft).Column を使うようにします。 オートフィルタは最終行を気にする必要はなさそうですね。ありがとうございました。

関連するQ&A