Visioの「ページ散乱」を秒殺せよ。VBAで操るページ自動整列の極意
こんにちは。現場で泥臭く、かつエレガントに自動化を追求しているエンジニアです。
Visioで大規模なシステム構成図を描いていると、必ず直面する「カオス」。ページが増えるたびに右クリックで手動並び替え……そんな不毛な作業であなたの貴重な思考時間を浪費してはいけません。
今回は、「Visioのページをルールに基づき一瞬で並べ替える」というテーマで、Visio VBAの深淵に少しだけ触れてみましょう。これを理解すれば、Visioのオブジェクトモデルを自在に操るための「第一の鍵」が手に入ります。
—
1. Visioオブジェクトモデルの「階層構造」を理解する
まず、私たちが操作するVisioの構造は、以下のようなピラミッドになっています。
- Application(Visioそのもの)
- Document(開いているファイル)
- Pages(ページ集団)
- Page(個々のページ)
並び替えを行うということは、この「Pages」コレクションの中にある「Pageオブジェクト」のインデックスを操作するということです。ここを理解せずにコードを書くと、Visioは容赦なくエラーを吐き出します。まずは、「どこを操作しているのか」を常に意識してください。
—
2. ページを自動並べ替えする魔法のスクリプト
今回は、「ページ名(Name)を昇順に並べ替える」という最も実用的なマクロを作成します。これさえ理解すれば、プレフィックス(例:`01_概要`, `02_NW構成`)を用いた並び替えも自由自在です。
Sub SortPagesByName()
Dim doc As Visio.Document
Dim i As Integer, j As Integer
Dim pageCount As Integer
‘ アクティブなドキュメントを対象にする
Set doc = ActiveDocument
pageCount = doc.Pages.Count
‘ ページが1枚以下なら何もしない(無駄な処理を省くのがプロの流儀)
If pageCount <= 1 Then Exit Sub
' バブルソートアルゴリズムでページ名を比較・入れ替え
' ※要素数が少ないページ並び替えには十分高速です
For i = 1 To pageCount - 1
For j = i + 1 To pageCount
' 名前を比較(アルファベット・数字順)
If StrComp(doc.Pages(i).Name, doc.Pages(j).Name, vbTextCompare) > 0 Then
‘ Reorderメソッドが「並び替え」の核心
‘ Pages(j)をPages(i)の直前に移動させる
doc.Pages(j).Index = i
End If
Next j
Next i
MsgBox “ページの並び替えが完了しました!”, vbInformation
End Sub
このコードのポイント:`Index` プロパティの魔力
かつては `Reorder` メソッドを多用していましたが、現代のVisio VBAでは、単に `Page.Index` を書き換えるだけで、Visioが自動的に他のページをシフトしてくれます。「入れ替える」のではなく「位置を指定する」という考え方が、Visio自動化の肝です。
—
3. 陥りやすい「落とし穴」を回避せよ
初学者が必ず突き当たる壁が2つあります。ここをクリアすれば、あなたはもう中級者です。
① インデックスのズレ問題
ページを並び替える際、ループの回し方を間違えると「存在しないインデックス」を参照しようとしてエラーになります。上記のコードのように、`i` と `j` の関係をしっかり制御することが重要です。
② 名前の重複エラー
Visioでは、同じ名前のページは存在できません。マクロを実行する前に、すべてのページにユニークな名前がついていることを確認してください。もし名前が重複していると、Visioは「名前が衝突しています」と悲鳴を上げます。
—
4. さらなる高みへ:自分だけのルールを適用する
今回のコードは「名前順」ですが、応用編として以下のようなカスタマイズが可能です。
- プレフィックス抽出: `Left(page.Name, 2)` で先頭2文字を抽出し、それをキーにして並べ替える。
- 特定のページを固定: 「表紙」や「目次」という名前のページは常に先頭(Index=1)に来るように条件分岐を加える。
これらを組み合わせれば、どんなに複雑な構成図でも、ボタン一つで「整然としたカタログ」のような図面に生まれ変わります。
—
最後に:自動化は「あなたの分身」を作ること
マクロを書くことは、ただ楽をすることではありません。「自分が行っていた思考のプロセスを、コードという形に定着させること」です。
Visio VBAは、オブジェクトのライフサイクルを意識し始めると非常に面白くなります。まずはこのコードをコピーして、適当なテストファイルで試してみてください。Visioが自分の意のままにページを並べ替える瞬間、きっと「自動化の快感」を感じていただけるはずです。
何かうまくいかないことがあれば、いつでも聞いてください。あなたの自動化の旅を、全力でサポートします。
