|
>考えてやってみました。無駄な部分があるとは思いますが。。。
>test1もtest2も
>一度では削除できず、2度3度目で、すべて削除されます。
>理由がわかりません。なぜでしょう?
【23731】Re:For Next と For Each文の関係
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=23731;id=excel
でも書きましたが、Cell(Row, Column)はIndexで指定できますよね?
Indexで指定できるような Collection Object を For Each 〜 Next Loop で
削除するとこのような現象が発生します。
というのは、For 〜 Next Loop を Index で
昇順(加算)に回しているのと一緒だからです。
そういった場合、逆順(減算)でLoopを回してやることにより、
回避できますが、ところがどっこいRow, Columnの削除は
非常に処理が重いのです。
これに関しては、Row, ColumnにIndexがついていることからもわかるでしょう?
削除するとそれ以降のIndexを再構成しなくてはなりませんから・・・
なので、私はめったに削除・挿入は使いません。
たいていは、Clear, ClearContentsで事足りるはずです。
ちなみに私が意図したまとめて削除とは、Loop内で開始行と終了行を取得し、
Loop終了後に削除すると言う意味です。
連続した範囲の削除は、それほど時間がかかりません。
(分断された範囲とでTestして、処理時間を計測してみるとよいでしょう)
もっとも、速度を求めるなら配列を使いますし、
Sortした上でAutoFilterを使うのはありでしょう。
あと、この私の発言は、もともとのDataがばらばらに並んでいて、
削除するものが非常に多いことが前提です。
1行しか削除しない場合とか、すでにきれいに並んでいるDataでは
こっちのほうが遅くなる場合もあります。
|
|