教えて!gooにおける不適切な投稿への対応について

いつもお世話になっております。
Excel VBAで、広範囲のエリア(例えばA1:G65535)を消去したいのですが、動作させるとタスクがフリーズしたようになり(PC自体は正常)応答が帰ってきません。範囲を狭くすれば何も問題ないのですが・・・良い智恵をお貸し下さい。

コードは Range("A***:G***").ClearContents
を使ってます。

gooドクター

A 回答 (3件)

>ところが、『行の高さ』を変更すると劇的に遅く(重く)なるのです!


>Excelの設定は変えていないし、PCもPen4 3GHz メモリ1Gなのでスペック的にも問題ないと思います。
>これって、Excelのバグかなんかでしょうか?

重くなっても時間が経てば復帰するなら不具合とは言えないですね。
Excel内部のデータの記録方法により、部分的な変更で良いか、
データ全体を書き換えないといけなくなるかで、処理の重さは変わってきますから。

ちなみに使用のWindowsとExcelのバージョンは?

Office 2000や2003だとメモリが充分にあってもExcelが扱えるサイズに限度がありますし、
2007では、その制限も大幅に緩和され処理の最適化もされていますが、メモリが多く必要になります。
2007なら2GB以上は必要かも知れません。

この回答への補足

WindowsXPでExcel2003です
原因はともかく、結果の回避はできそうです。
ありがとうございました。

補足日時:2008/09/08 13:56
    • good
    • 0

大体はNo.1の方が言われている通りで1命令で処理できるマクロを高速化できる余地はあまりありません。


後は気休め程度にしかならないかも知れませんが、画面更新を中止させるとか、そのセルを参照している計算式が多くあるなら再計算を一時中止させるくらいしか

Dim wst As Worksheet

'高速化の為に画面更新を中止させる
Application.ScreenUpdating = False

'ワークシートの再計算を停止する
For Each wst In ActiveWorkbook.Worksheets
wst.EnableCalculation = False
Next wst

Range("A1:G65536").ClearContents

'ワークシートの再計算を再開する
For Each wst In ActiveWorkbook.Worksheets
wst.EnableCalculation = true
Next wst

'高速化の為に画面更新を再開する
Application.ScreenUpdating = true

この回答への補足

yama1718さん --HV--さん ありがとうございます
再計算や画面更新の停止で少しは早くなった?かなっ?て感じです。
色々とTESTしてみたところ、
・計算式、オブジェクトはあまり影響がない(多少はありますが...)
・列幅も影響がない
ところが、『行の高さ』を変更すると劇的に遅く(重く)なるのです! Excelの設定は変えていないし、PCもPen4 3GHz メモリ1Gなのでスペック的にも問題ないと思います。
これって、Excelのバグかなんかでしょうか? 

補足日時:2008/09/08 11:47
    • good
    • 0

あくまで参考意見ですが、


手作業でその作業をしたときとマクロで対応したときの処理速度はどれくらい違うんでしょうか?
手作業でも同じになるなら、PCスペックの問題な気がします。

あえてやるなら、細かい範囲の繰り返し消去でしょうか。
for i = 1 to 7 ' a->g
range(cells(1,i),cells(65536,i)).ClearContents
next i
行単位でもフリーズするなら、さらに細かくコーディングするしかないかも。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング