【入門編】【初心者向け】不要なレイヤーを全ページから一括削除してファイルサイズを軽量化するスクリプト – Visio VBA解析バイブル

スポンサーリンク

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スキルは「作業者」から「自動化エンジニア」へと進化します。

何か分からないことや、さらにカスタマイズしたい要望があればいつでも聞いてください。あなたの自動化ライフを心から応援しています!

タイトルとURLをコピーしました