プロが教えるわが家の防犯対策術!

Range("A1:A100").Delete Shift:=xlUp で
セルの削除で上方向にシフトになりますが、

この作動が0.17秒くらいかかります。

これを0.10秒未満に。
できれば0.02秒くらいにしたいのですが、
何か別の方法ありませんでしょうか。

また、コードの工夫以外にも、
Officeの設定で早くなったりするのでしょうか?


セルが削除されなくても、下のセルが上へ移動でも構いません。
たとえば、Rnage("A1”)=Range("B1")に変数を使って、
ループで100セル繰り返せば、実質同じ作動になりますが、Deleteより当然遅いです。
さらに、Rnage(”B1")より下のセルが、全て上方向に
移動しないと困るので確実に使えません。

環境
WinXP、Win7
Office2003


ハードについてのアドバイスは一切不要です。
高速な作動が必要な理由についての返答は一切不要です。

A 回答 (3件)

すでに試されているか分かりませんが、、



Application.ScreenUpdating = False

で画面描写を更新しないようにはされていますか?
    • good
    • 0
この回答へのお礼

記載不備申し訳ございません。
Application.ScreenUpdatingは使っております。

お礼日時:2010/02/23 02:50

理由は解りませんが、VBAによる行列やセルの削除を伴う処理は、他の処理と比較すると時間が掛かるようです。



>ループで100セル繰り返せば、

実際にどのような動作になるのか文面ではイメージ出来ませんが・・・。
範囲を決められるならコピーでも良いのでは?

Range("A101:A200").Copy Range("A1:A100")
Range("A101:A200").ClearContents
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

コピペも試したのですが、範囲コピーしている状態が一瞬でも入ると、
その直後に範囲を解除しても、
結構時間がかかったので、Deleteに行き着きました。

お礼日時:2010/02/23 02:53

win7 winxp  office2003の条件で


白紙に近い状態で、遅いPCと速いPCで調べてみました。
 ハードに言及しないという条件を守ると、
シートを見せないでやると1ミリ秒以内で、
シートを小さくすると4ミリ秒
シートを大きく見せて数字を2000個と乱数データを3000個入れたシートで
14~20ミリ秒くらいでした。
A1:A100でもA1:A1000でもほとんど同じでした。

0.17秒(170ミリ秒)もかかるのには
何か理由があるはずです。
 アップデートプログラムがインストール待ちになっているとか?
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
そんなにも早く処理が終わるものなのですね。

アップデートプログラム的なものは特になかったです。

当方の結果がこんなに遅いものとは知りませんでした。
こんなにも速度が違うのなら、
他のコードが干渉している可能性がありますね。見直します。

シートを小さくすると、処理速度に影響があるとは思いもしませんでした。
早速試させて頂きます。

実例を具体的に示して頂き本当にありがとうございました。

お礼日時:2010/02/23 03:02

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