業務でExcelファイルを運用していると、いつの間にか「見えない図形」が大量に蓄積されていることがあります。特に、他部署から送られてきたファイルや、長年使い回されているフォーマットでは、オブジェクトの数が膨れ上がり、ファイルサイズが肥大化したり、動作が重くなったりする原因になります。今回は、それらを一掃する実務的なVBAコードと、現場で必ず直面する「落とし穴」について解説します。
なぜ図形が勝手に増えるのか
実務において図形が蓄積する最大の原因は、「コピー&ペースト」の繰り返しです。特に、Webサイトからデータをコピペした際に付随してくる透明なテキストボックスや、条件付き書式が壊れて生成されたオブジェクトなどが、シートの隅に溜まっているケースが非常に多いです。これらは手動で選択するのが難しいため、VBAによる一括削除が最も効率的です。
図形を全て削除する基本コード
まずは、アクティブシート上の図形を全て削除するコードを紹介します。
Sub DeleteAllShapes()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
shp.Delete
Next shp
End Sub
このコードは非常にシンプルですが、実務ではこれだけでは不十分な場合がほとんどです。
実務で必ず考慮すべき「消してはいけないオブジェクト」
現場のExcelファイルには、削除すると困るものも存在します。例えば、フォームコントロールの「ボタン」や、特定の「チェックボックス」、あるいは計算結果を表示するための「コメント枠」などが該当します。
全てを消すのではなく、特定の条件を除外して削除する工夫が必要です。例えば、名前の一部に「除外」という文字が入っている図形は残すように改良してみましょう。
Sub DeleteShapesExceptSpecific()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
‘ 名前の中に”除外”という文字が含まれていなければ削除する
If InStr(shp.Name, “除外”) = 0 Then
shp.Delete
End If
Next shp
End Sub
プロの現場での運用テクニック
VBAで図形を削除する際、処理速度を上げるために画面更新を停止することは基本中の基本です。また、図形が大量にある場合、削除によってインデックスがずれてエラーになることを防ぐため、必ず「後ろから消す」か、「For Each文」を使用してください。
さらに高度なテクニックとして、「図形の種類(Type)」で判定する方法も有効です。例えば、画像(msoPicture)だけを一括削除したい場合は、If shp.Type = msoPicture Then と記述することで、誤ってボタンやグラフを消してしまうリスクを最小限に抑えられます。
図形削除は、ファイルの軽量化に直結する非常に効果的なメンテナンス術です。ぜひ、ご自身の業務ファイルで「隠れたゴミ」を一掃してみてください。驚くほど動作が軽くなるはずです。
