以下、Excel2003までの話です。2007では起こらない(はず)。
先輩の使っているファイルで、見た目以上にやけに重たいのがありました。よくある話ですが。
特徴的なのは、カーソルを移動させたりズームしたりするとやけに画面がカクカク。
描画系ってことは、なんか図形オブジェクトがゴミになってるんだな・・・
と、時間があったので調べてみました。
特徴的なのは、カーソルを移動させたりズームしたりするとやけに画面がカクカク。
描画系ってことは、なんか図形オブジェクトがゴミになってるんだな・・・
と、時間があったので調べてみました。
図形オブジェクトって、シート上で見えないままゴミになって残ったりするので要注意です。
例えば上のような四角形が作ってあったとして、列ごと削除したといたします:
一見、列と一緒に四角形も消えたかに見えます。ほんとに消えたのか?
「オブジェクトの選択」モードにして調べてみます:
「オブジェクトの選択」モードにして調べてみます:
すると・・・左端になんか残っとるやんけ!行を削除すると、下右図のように上端に残っとります:
で、行・列両方削除すると左上端に残ります(下左図)。
どういう状態なのかとVBEで調べてみると、下右図のような結果に:
どういう状態なのかとVBEで調べてみると、下右図のような結果に:
左から&上からの位置がゼロ、幅も高さもゼロ。これじゃー見た目では気づかないっすよね。
おそろしいのは、こうして端っこに見えない状態で残ったまま範囲をコピーした場合。
例えば行を削除して上端にゴミが残ったまま、列ごとコピーすると・・・
おそろしいのは、こうして端っこに見えない状態で残ったまま範囲をコピーした場合。
例えば行を削除して上端にゴミが残ったまま、列ごとコピーすると・・・
見えないゴミも一緒にコピーされます。
気づかないままこれを繰り返すと、ゴミが際限なく増え続けるというw
気づかないままこれを繰り返すと、ゴミが際限なく増え続けるというw
これは図形のプロパティで「セルに合わせて移動やサイズ変更をする」が選択されている場合:
他の選択肢ではこのようなことは起こりません。
でも「セルに合わせて移動やサイズ変更をする」がデフォルトなんですよね。それが問題の原因。
でも「セルに合わせて移動やサイズ変更をする」がデフォルトなんですよね。それが問題の原因。
で、冒頭の先輩のファイルにもこの状況が起こっていたことが分かりました。
左上隅に、表示されていない図形オブジェクトが7000個以上たまってました・・・^^;
ちなみに図形オブジェクトの数はVBEで:
まとめて全部削除したところ、1MB以上あったファイルが200KB以下になりました。
画面がカクカクするのも直りました。ほんと、おそろしいっす。
左上隅に、表示されていない図形オブジェクトが7000個以上たまってました・・・^^;
ちなみに図形オブジェクトの数はVBEで:
?ActiveSheet.Shapes.Countみたいにやれば簡単に。
まとめて全部削除したところ、1MB以上あったファイルが200KB以下になりました。
画面がカクカクするのも直りました。ほんと、おそろしいっす。
2007ではこんな心配はないようです。
列ごとや行ごと削除すると、図形オブジェクトも一緒に削除されます。
それと、「オブジェクトの選択と表示」っていうのがあって:
列ごとや行ごと削除すると、図形オブジェクトも一緒に削除されます。
それと、「オブジェクトの選択と表示」っていうのがあって:
シート上の図形を一覧で把握できます。この機能、もっと早く導入してほしかった・・・
ところで、シート上の図形オブジェクトをコードからまとめて削除しようとする場合、
ActiveSheet.Shapes.SelectAll Selection.Deleteって書くことになるようです。
なんか、Shapes.Deleteとか書けないの?と一瞬思ってしまうのですが、そんなわけもなく。
調べてたら、とても勉強になるページを見つけたのでご参考まで:
調べてたら、とても勉強になるページを見つけたのでご参考まで: