EXCEL97でVBA(CSVファイルを読んで、内容ごとにシートに書き込んで、そのシートをどんどん自身のブックに追加していく)を作り、それを実行後、手で、追加分のシートを別のブックにコピーした後、削除し、実行前の状態(追加シートのない元のもの)に戻すといったことを繰り返していると、VBAを実行しているEXCELの容量が実行前の容量に比べ、どんどん大きくなり、しまいには、使えないほど実行速度が落ちてしまうことになってしまいます。確かに追加のシート分は実行時増えますが、上記の通り、別のブックにコピー後、削除して、実行前の状態に戻してから再実行しているので、容量がどんどん増えていくのは、なんとも腑に落ちません。どうすれば、容量を増やさずに何回もVBAを実行できるようになるのでしょうか。どなたか、アドバイスをお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/02/06 17:50:55
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント27pt

>それを実行後、手で、追加分のシートを別のブックにコピーした後、削除し、実行前の状態(追加シートのない元のもの)に戻すといったことを繰り返していると

この処理で 何がしたいのか不明です。

実行前の状態に戻したいのならば、ファイルをいったん保存せずに 閉じて 開きなおしたらいいのでは ないのでしょうか?

id:ota2244 No.2

回答回数77ベストアンサー獲得回数4

ポイント27pt

VBA内でオブジェクトを解放していないのであれば、解放処理を入れてみてはいかがでしょうか?

それでダメならEXCEL-VBAがメモリリークを起こしている可能性はあります。


VBAのつくりを変えて、自身のブックに追加するのではなく、新規のブックに追加するなどの処理にする方が良いかもしれません。

id:kn1967 No.3

回答回数2915ベストアンサー獲得回数301

ポイント26pt

>別のブックにコピー後、削除して、実行前の状態に戻してから再実行している


Excelはガベッジコレクション(内部の使わなくなった空間の廃棄)を行わず、Book内部の空いた空間を空いたままの状態で残してしまいます。

そのためファイルサイズは拡大の一途を辿ります。


対処としては、

(案1)連続して動かさない。

(案2)新しいBookを作成→そのBookの中にシートを作成→新しいBook自体を削除 という手順に変える。

(案3)移し変えるのではなく、別のBookというものに直接書き込むようなプログラムに変える。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません