アプリ版:「スタンプのみでお礼する」機能のリリースについて

フィルタで検索した行を一括して削除するマクロを作りました。
記録して加工したマクロで今のところ動くのですが、
理解不能の箇所があるので教えてください。

下記マクロはC列の空白行をフィルターで選択して、表示された行を削除するマクロです。(データは2行目から始まっていて、フィルターは1行目に行います。また、行は全て連続しています。)
また、コメントを各コードにつけています。

ここで、コメント内の(1)で示した箇所は2行目を選ぶことになっているのですが、何故これで良いのでしょう?2行目のデータがフィルターにより隠れることもあるのですが、このコードできちんと動きます。
可視セルしか削除しないのなら、分かるのですが、
そのようなコードも無いようですし・・・
なぜこのコードで動くのか教えてください。

Rows("1:1").Select  '1行目を選ぶ
Selection.AutoFilter  'オートフィルター
Range("C1").Select   'C1を選ぶ
Selection.AutoFilter Field:=3, Criteria1:="=" '空白行を探す。Field3は不明です
Rows("2:2").Select  '(1) 2行目を選択
Range(Selection, Selection.End(xlDown)).Select '2行目から連続した最後の行までを選択
Selection.Delete Shift:=xlUp  '選んだところをDelして上に詰める。
Range("C1").Select  'C1を選ぶ
Selection.AutoFilter Field:=3  'フィルタ解除

基本的なことかもしれませんが、ご教示頂ければ幸いです。
よろしくお願いします。

A 回答 (1件)

こんにちは。



簡単に言うと
フィルターを掛けて抽出された範囲を選択して何かしらの処理をさせるとその処理の対象は抽出されたセルのみになるということです。

例えば、4,7行が抽出されていてその2行を選択すると、実際には、4,7行だけではなく、抽出されていない5,6行も選択された状態になり、選択範囲は、4,5,6,7行なりますが、処理の対象はあくまでも抽出された4,7行のみになるということです。
 
ですから、質問のように抽出されてない行を含めて選択しても問題はないことになります。
もちろんそのフィルターを掛ける表の範囲であることはいうまでもありません。
 
但し、選択範囲をループして処理する場合は、選択範囲全て(例では、4567行)が処理対象になりますのでそこは注意が必要です。

通常このような場合は、可視セルのみ選択して処理するのが普通です。
以上です。
    • good
    • 0
この回答へのお礼

お礼が遅くなり、申し訳ございません。
ご回答、ありがとうございました。

可視セルのような働きになるのですね。
これで安心して使うことができます。
ありがとうございました。

お礼日時:2007/04/29 14:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!