VBA: UsedRange.Clearでクリア?
こんにちは。
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操作(手作業)で「すべてのセルを選択(左上三角クリック)」した上で「クリア => すべてをクリア」と同じ結果を得るには、どのようにしたらよりでしょうか。
お礼
どうもありがとうございます。 細かい説明で、とてもわかりやすくてうれしいです。 しかし、100個って・・・。大変だなぁ。 せっかくなので、「Hard」でやりたいと思います。