Visioの「重い」を解消する!全ページ一括・レイヤー削除マクロで業務をスマートに
こんにちは。業務自動化の現場でVisioと格闘し続けてきたエンジニアです。
Visioで図面を描いていると、いつの間にかファイルサイズが肥大化し、「保存に時間がかかる」「メールで送れない」といった悩みにぶつかることはありませんか?その原因の多くは、実は「使っていないレイヤー」や「隠れたゴミデータ」が全ページに蓄積されていることにあります。
今回は、マクロの記録を卒業し、Visio VBAを使って「不要なレイヤーを全ページから一括抹消し、ファイルを極限まで軽量化する」という実務テクニックを伝授します。ここをマスターすれば、Visio操作の解像度が一段階上がりますよ。
—
なぜ「レイヤー」を削除すると軽くなるのか?
Visioのレイヤーは、オブジェクトをグループ化して表示・非表示を切り替える便利な機能ですが、ページ数が増えるほど「名無しのレイヤー」や「不要な社内設定用レイヤー」が各ページに居座り続けます。
特に外部配布用の図面には不要な情報を抱えたままにするのは、セキュリティ面でも管理面でもリスクです。今回は「特定の名前のレイヤーを、全てのページから根こそぎ削除する」というアプローチで、図面の断捨離を行います。
—
これが「現場の最適解」:軽量化スクリプト
以下のコードは、単に削除するだけでなく、エラーハンドリング(予期せぬ中断を防ぐ)と効率化を考慮した実務仕様です。
Sub RemoveLayerFromAllPages()
‘ 削除したいレイヤー名を指定
Const TARGET_LAYER_NAME As String = “社内用メモ”
Dim pg As Visio.Page
Dim lyr As Visio.Layer
Dim i As Integer
‘ 画面更新を止めることで処理速度を劇的に向上させる(鉄則!)
Application.ScreenUpdating = False
‘ 全ページをループ処理
For Each pg In ActiveDocument.Pages
‘ ページ内のレイヤーを逆順から確認
‘ ※削除操作はインデックスがずれるため、必ず後ろから処理する
For i = pg.Layers.Count To 1 Step -1
Set lyr = pg.Layers.Item(i)
‘ レイヤー名が一致したら削除
If lyr.Name = TARGET_LAYER_NAME Then
pg.DeleteLayer lyr
Debug.Print pg.Name & ” から ” & TARGET_LAYER_NAME & ” を削除しました。”
End If
Next i
Next pg
‘ 画面更新を再開
Application.ScreenUpdating = True
MsgBox “全ページからのレイヤー削除が完了しました!”, vbInformation
End Sub
—
コードの「ここが肝!」:3つのポイント
初心者が陥りやすい罠を回避するために、以下の3点を意識してください。
1. 「後ろから」ループさせる理由
コレクション(レイヤーの集まり)から要素を削除する場合、前から順番に削除するとインデックス番号がずれてしまい、残りの要素が正しく取得できなくなります。「削除は後ろから」。これはVBAエンジニアの鉄則です。
2. `Application.ScreenUpdating` の魔法
Visioの画面描画は非常にコストが高い処理です。ループのたびに画面を更新していると、マクロが途端に重くなります。冒頭で `False` にし、最後に `True` に戻すだけで、処理速度が数倍〜数十倍に跳ね上がります。
3. オブジェクトのライフサイクル
`Set lyr = …` と記述することで、レイヤーというメモリ上のオブジェクトを特定しています。コードを修正する際は、この「どのページ(Page)の、どのレイヤー(Layer)を操作しているか」という階層構造を常に意識しましょう。
—
導入の手順:マクロを使う準備
初めてVBAを触る方も安心してください。以下の手順で実行できます。
1. Visioを開き、`Alt` + `F11` を押してVBAエディタを開きます。
2. メニューバーの [挿入] > [標準モジュール] をクリックします。
3. 出てきた白い画面に、上記のコードをコピー&ペーストします。
4. `TARGET_LAYER_NAME` の値を、削除したいレイヤー名に書き換えてください。
5. `F5` キーを押すか、実行ボタンを押せば完了です。
—
最後に:自動化の先へ
今回学んだ「全ページループ」の考え方は、レイヤー削除だけでなく、「全図形のフォント一括変更」や「全ページのタイトル自動更新」など、あらゆるVisio操作に応用可能です。
「マクロの記録」は便利ですが、今回のような一歩進んだコードを書けるようになると、あなたのVisioスキルは「作業者」から「自動化エンジニア」へと進化します。
何か分からないことや、さらにカスタマイズしたい要望があればいつでも聞いてください。あなたの自動化ライフを心から応援しています!
