セルと一緒に消えます


Excel 2007では、オートシェイプなどのオブジェクトがSmartArtに一新されました。この新しい描画エンジンはかなりの優れモノで、開発当初から「今度のシェイプはすごいよ!」という声を何度となく開発チームから聞いていました。確かにデザインも綺麗だし、文字の加工も強力だし、Excelの表現力がますますアップすること間違いありません。中でも感心したのは、セルを削除したときに隠れてしまうという不具合が解消されたことです。

まずExcel 2003での挙動をお見せしましょう。シート上に任意のオートシェイプを配置します。

オートシェイプをすべて含むように列全体を選択して削除します。

実行するとこうなります。オートシェイプはセルと一緒に削除されたように見えますが、行番号のあたりにマウスを合わせると、マウスポインタの形が変化します。これは、オートシェイプを選択して移動するときのマウスポインタです。

試しにそのままシートの中にドラッグしてみると・・・削除されたはずのオートシェイプが現れました。

実際には削除されていたのではなく、横幅が0になって、ワークシートの左端に移動しただけだったのです。ハンドルをドラッグして幅を広げると、ほら元に戻りました。

ワークシート上に配置したオートシェイプは、下のセルと一緒に移動したり、セルの大きさに応じて縦横のサイズが自動的に変化したりします。そのことから、何となく「オートシェイプはセルと一体」というイメージを抱きやすいです。しかし、このイメージがくせ者。上でやったように、セルを削除すればその上に乗っているオートシェイプも削除されると勘違いしているユーザーが非常に多いです。こうして作成された見えないオートシェイプですが、実際は存在しているのですからブック内にデータとして保存されます。図形関係ですから、けっこうファイルサイズが大きくなります。ファイルサイズが大きくなると読み込み/保存に時間がかかるようになります。データの割にファイルサイズの肥大化しているブックがあったら、こうしたステルス・オートシェイプを疑ってください。

さて、同じことをExcel 2007でやってみましょう。

[挿入]タブの[図形]から任意の図形を配置します。同じように列全体を選択して[削除]を実行します。

今度はどうでしょう。行番号あたりにマウスを移動してもマウスポインタは変化しません。

でも、これだけでは信用できませんね。そこで次のようなマクロで存在を確認してみます。これは、アクティブシートにあるオートシェイプの個数を調べるマクロです。

Sub test()
    MsgBox ActiveSheet.Shapes.Count
End Sub

どうやら間違いなく削除されたようです。さすがSmartArt!