- ベストアンサー
オートフィルタで最終行を指定する必要は?
- エクセルでVBAでオートフィルタをする場合、最終行を指定する必要はあるのでしょうか?
- VBAを使用してエクセルでオートフィルタを行う際、最終行を取得・指定する必要があるかどうかについて教えてください。
- オートフィルタを設定する際、どちらの方法がより適切か、最終行の取得・指定が必要なのか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ご提示のサンプル・・と言うかオートフィルタの処理であれば、必要はあまりないと思います。 ただし、途中でまったくの空白行・空白列が挟まってしまう可能性があるなら必要な場合もあります。 (表の範囲は100行あるが、51行目には何も入力されていない、など) 任意のセル(下記はA1セル)を含む「連続する」表範囲を指定するのであれば、 Cells(1, 1).CurrentRegion.Select などのやり方もアリですね。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
実際には、そのサンプルであれば sub macro1() range("A1").autofilter end sub とするだけで、勝手に右端列・最終行まで自動検知して適切にオートフィルタを取り付けてくれます。 ただし、何らかの理由で「全く空白の空行」「全く空白セルのみの空列」が範囲の中に含まれていた場合を想定して、右端列・最下行をキチンと調べて明示的に指定した方が、より「安全」とは言えます。 またご相談では列範囲も可変を想定していますが、通常は列範囲は既知で、下向け何行目までデータが記入されているかは不定というシチュエーションが大半です。 そういう場合 sub macro2() range("A:B").autofilter end sub などのようにして、取りこぼしを防ぐ方法もあります。
お礼
A1さえ選択すればいいのですか。 「全く空白の空行」は想定してません。ありがとうございました。
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
オートフィルタは、列で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をはじめた人は誰しも最初に引っかかる問題ではありますが、幸いにもインターネットで検索するといくつもの解決法が見つかります。 ところが…動いたり動かなかったり、想定外の動作をすることがあります。そもそもいくつもの解決法があること自体おかしい、いったい本当の答えはどれ?この際、白黒はっきりさせようじゃないかというのがこのページの趣旨です。
お礼
最終行:Cells(Rows.Count, "A").End(xlUp).Row 最終列:Cells(1, Columns.Count).End(xlToLeft).Column を使うようにします。 オートフィルタは最終行を気にする必要はなさそうですね。ありがとうございました。
お礼
Cells(1, 1).CurrentRegion.Select は初めて知りました。ありがとうございました。