【入門編】【初心者向け】ページサイズをA3横からA4縦へ一括変換する際の「図面位置ズレ」を防ぐ設計術 – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの「ページサイズ変更」で図面が崩壊する原因と、それを防ぐ究極の設計術

こんにちは。業務自動化の世界へようこそ。
Visioで「A3横からA4縦へ一括変換したい」と考え、ページ設定をいじった瞬間に図面がぐちゃぐちゃに崩れ、絶望した経験はありませんか?

実は、Visioのページサイズ変更は単なる「用紙設定の書き換え」ではありません。「図面全体を新しい座標系にどうマッピングし直すか」という物理計算なのです。今回は、プロの現場で使われる「位置ズレを防ぐための設計思想」と、その具体的なコードを伝授します。

—

なぜ図面は「崩れる」のか?

初心者が陥りやすい罠は、`Page.PageSheet`のサイズプロパティ(`PageWidth`, `PageHeight`)を直接書き換えるだけのコードを書くことです。

Visioの図面は、「用紙の左下(0,0)」を原点として配置されています。サイズを変えると、原点は固定されたまま、右上の境界線だけが移動します。その結果、A3からA4へ変更した瞬間に、右側にあったコンテンツが「はみ出した」と判定され、意図しない場所に追いやられたり、グループごとズレたりするのです。

これを防ぐための鉄則は、「コンテンツ全体を囲むバウンディングボックス(境界枠)を計算し、新しいページの中央に再配置する」というロジックを挟むことです。

—

プロの設計:位置ズレ回避の計算ロジック

今回紹介するコードの心臓部は以下の3ステップです。

1. 境界の特定: `Page.BoundingBox` を使い、現在配置されている全シェイプが占める範囲を取得する。
2. ページサイズ変更: 用紙サイズをA4縦に変更する。
3. 再配置: コンテンツの中心座標を計算し、新しいページの中央へ移動させる。

実践コード:A3横からA4縦へスマートに変換する

このコードを標準モジュールに貼り付けて実行してください。

Sub ConvertA3ToA4_Portrait()
Dim vsoPage As Visio.Page
Dim vsoShape As Visio.Shape
Dim left As Double, bottom As Double, right As Double, top As Double

Set vsoPage = ActivePage

‘ 1. 現在の全シェイプの境界ボックスを取得(単位はインチが標準)
‘ 引数:0(全部), 0(非表示除く), 0(戻り値の型)
vsoPage.BoundingBox 0, left, bottom, right, top

‘ 2. ページサイズをA4縦に変更 (210mm x 297mm)
‘ Visio内部単位はインチなので、mmをインチに換算(25.4で割る)
vsoPage.PageSheet.Cells(“PageWidth”).Formula = 210 / 25.4
vsoPage.PageSheet.Cells(“PageHeight”).Formula = 297 / 25.4

‘ 3. 全シェイプをグループ化して中央へ移動
‘ 個別に移動させると計算が複雑になるため、一時的にグループ化が定石
Dim vsoSelection As Visio.Selection
Set vsoSelection = vsoPage.CreateSelection(visSelTypeAll)

‘ グループ化して中央揃えを適用
Dim vsoGroup As Visio.Shape
Set vsoGroup = vsoSelection.Group

‘ 新しい中心座標へ移動(A4:幅105mm, 高さ148.5mm)
vsoGroup.Cells(“PinX”).Formula = (210 / 25.4) / 2
vsoGroup.Cells(“PinY”).Formula = (297 / 25.4) / 2

‘ 必要に応じてグループ解除
vsoGroup.Ungroup

MsgBox “A4縦への変換と中央配置が完了しました!”, vbInformation
End Sub

—

コードのここがポイント!

  • `BoundingBox` メソッドの重要性:

多くの人はシェイプを一つずつループで回して座標を計算しようとしますが、それは非常に非効率です。Visioには描画範囲を一発で算出するメソッドが用意されています。これを使わない手はありません。

  • 「インチ」と「ミリ」の罠:

Visioの内部計算は常に「インチ」です。コード内で `210 / 25.4` としているのは、「読みやすさと正確さ」を両立させるための必須テクニックです。

  • グループ化(Group)という魔法:

バラバラの部品を一個ずつ移動させるのは、座標計算のミスを誘発します。一時的にグループ化して「塊」として扱うことで、中心座標への配置が数学的に一意に決まるようになります。

—

初心者が陥りやすいエラーと回避策

1. 「図面が保護されている」エラー:
もし図面に「ロック」がかかっていると、このコードはエラーを吐きます。シェイプの `Lock` プロパティを確認するか、手動で一度ロックを解除してから実行する習慣をつけましょう。
2. 単位が狂う:
Visioのドキュメント設定で単位を「ミリ」にしていても、VBA内部では「インチ」です。単位変換をサボると、図面が極小になったり巨大になったりします。常に `/ 25.4` を意識してください。

最後に

VBAをただの「記録」から「設計」へ昇華させるコツは、「コンピュータにどう動かすか」ではなく「図形の幾何学的な関係をどう定義するか」を考えることです。

今回紹介したコードは、あなたの業務から「手動で位置を微調整する」という退屈な時間を完全に消し去るはずです。ぜひ、ご自身の現場で試してみてください。ここをクリアすれば、あなたはもう立派なVisio自動化エンジニアの入り口に立っていますよ。応援しています!

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