• ベストアンサー

【ExcelVBA】 セルの削除(上方向にシフト)を超高速にする方法

Range("A1:A100").Delete Shift:=xlUp で セルの削除で上方向にシフトになりますが、 この作動が0.17秒くらいかかります。 これを0.10秒未満に。 できれば0.02秒くらいにしたいのですが、 何か別の方法ありませんでしょうか。 また、コードの工夫以外にも、 Officeの設定で早くなったりするのでしょうか? セルが削除されなくても、下のセルが上へ移動でも構いません。 たとえば、Rnage("A1”)=Range("B1")に変数を使って、 ループで100セル繰り返せば、実質同じ作動になりますが、Deleteより当然遅いです。 さらに、Rnage(”B1")より下のセルが、全て上方向に 移動しないと困るので確実に使えません。 環境 WinXP、Win7 Office2003 ハードについてのアドバイスは一切不要です。 高速な作動が必要な理由についての返答は一切不要です。

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

  • ベストアンサー
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.3

win7 winxp  office2003の条件で 白紙に近い状態で、遅いPCと速いPCで調べてみました。  ハードに言及しないという条件を守ると、 シートを見せないでやると1ミリ秒以内で、 シートを小さくすると4ミリ秒 シートを大きく見せて数字を2000個と乱数データを3000個入れたシートで 14~20ミリ秒くらいでした。 A1:A100でもA1:A1000でもほとんど同じでした。 0.17秒(170ミリ秒)もかかるのには 何か理由があるはずです。  アップデートプログラムがインストール待ちになっているとか?

emson100
質問者

お礼

ご返答ありがとうございます。 そんなにも早く処理が終わるものなのですね。 アップデートプログラム的なものは特になかったです。 当方の結果がこんなに遅いものとは知りませんでした。 こんなにも速度が違うのなら、 他のコードが干渉している可能性がありますね。見直します。 シートを小さくすると、処理速度に影響があるとは思いもしませんでした。 早速試させて頂きます。 実例を具体的に示して頂き本当にありがとうございました。

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

理由は解りませんが、VBAによる行列やセルの削除を伴う処理は、他の処理と比較すると時間が掛かるようです。 >ループで100セル繰り返せば、 実際にどのような動作になるのか文面ではイメージ出来ませんが・・・。 範囲を決められるならコピーでも良いのでは? Range("A101:A200").Copy Range("A1:A100") Range("A101:A200").ClearContents

emson100
質問者

お礼

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

  • seiiiichi
  • ベストアンサー率41% (79/190)
回答No.1

すでに試されているか分かりませんが、、 Application.ScreenUpdating = False で画面描写を更新しないようにはされていますか?

emson100
質問者

お礼

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

関連するQ&A

専門家に質問してみよう