dポイントプレゼントキャンペーン実施中!

こんにちは。
VBAでシート上のデータを完全にクリアする方法について質問です。


VBAで様々な処理をした結果を「results」というシートに書き出しているとします。

上記の処理をする前に、一旦書き出し用シートをまっさらにするために、以下のコードを実行しています。

ThisWorkbook.Worksheets(resultSheetName).UsedRange.Clear

私の理解している範囲では、これで「results」シートのデータは、完全に消去されている筈なのですが、VBAの処理を実行するたびにブックのファイルサイズが増えていってしまうという不思議な現象に悩まされています。

例えば、処理の実行前は、ファイルサイズが約45KBだとします。
これが実行後は、1300KB程度まで増えます。

ここで、上記の「UsedRange.Clear」の処理を実行すると、250KB程度までファイルサイズが落ちますが、2回目の処理をするとサイズが1500KB程度になります。
以降、前回の結果を「クリア => 処理 => 書き出し」という処理を繰り返すたびに、ファイルサイズが200~300KBずつ増えていってしまうのです。

不思議なのは、上記の「UsedRange.Clear」のかわりに、通常のEXCEL操作で、ワークシート左上(「A」と「1」の間にある)の三角形をクリックして、すべてのセルを選択した上で、「クリア => すべてをクリア」を実行すると、ファイルサイズが45KBに戻るのです。

「UsedRange.Clear」と、手作業の「クリア => すべてをクリア」は、同じことではないのでしょうか?

以下のようなことも試みてみましたが、処理が遅い上に、ファイルサイズ的にはもっとひどいことになってしまいました。

ThisWorkbook.Worksheets(resultSheetName).Range("A1").Resize(65536, 256).Clear

このままでは、処理を実行するたびにファイルが重くなってしまって、ツールとしてつかいものになりません。

通常のEXCEL操作(手作業)で「すべてのセルを選択(左上三角クリック)」した上で「クリア => すべてをクリア」と同じ結果を得るには、どのようにしたらよりでしょうか。

A 回答 (1件)

ThisWorkbook.Worksheets(resultSheetName).Cells.Clear



としてみてください。

>「UsedRange.Clear」と、手作業の「クリア => すべてをクリア」は、同じことではないのでしょうか?

違います。UsedRangeとは使用されているセルです。すべてのセルは、Cellsです。
    • good
    • 0
この回答へのお礼

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

確かにCells.Clearで手作業と同じ結果が得られました。

UsedRrangeの外側にどんなデータがあったのかは謎のままですが、
とりあえずファイルサイズが増大していくことは防ぐことができそうです。

お礼日時:2012/04/10 21:55

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