Visio VBAの真髄:Shape.CellsUで「図形」を「データベース」へ変える極意
こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアです。
Visioを単なる「お絵描きツール」だと思っていませんか?もしそうなら、あなたはVisioが持つポテンシャルの1%も引き出せていないことになります。
Visioの真の価値は、「図形の中に情報を詰め込み、それをVBAで自在に操る」点にあります。今回は、脱・初心者を目指すあなたのために、図形にデータを流し込む最重要プロパティ「`Shape.CellsU`」の深淵を紐解いていきましょう。
—
1. なぜ「CellsU」なのか?:オブジェクトモデルの深層
Visioの図形(Shape)は、単なる線や四角形ではありません。その内側には「シェイプシート」と呼ばれる強力なパラメータ集が隠されています。
`Shape.CellsU`は、そのシェイプシートの特定のセルを、VBAのコードから直接書き換えるための「直接アクセス用インターフェース」です。
- Cells vs CellsU: `Cells`は言語設定(ローカル)に依存しますが、`CellsU`はユニバーサル(英語名)。VBAで書くなら、将来的なバグを避けるために迷わず`CellsU`を使ってください。これがプロの流儀です。
—
2. シェイプデータに値を流し込む:実戦コード
例えば、「サーバー」という名前の図形に対して、`AssetID`というシェイプデータを書き込む処理を見てみましょう。
Sub SetShapeData()
Dim vsoShape As Visio.Shape
Dim vsoPage As Visio.Page
‘ アクティブページの最初の図形を取得
Set vsoPage = ActivePage
Set vsoShape = vsoPage.Shapes(1)
‘ 【重要】セクション名.行名.セル名 で指定する
‘ Prop.AssetID の値を “SRV-001” に書き換える
‘ 書式: “Prop.プロパティ名.Value”
vsoShape.CellsU(“Prop.AssetID.Value”).FormulaU = Chr(34) & “SRV-001” & Chr(34)
‘ ※FormulaUを使う理由:
‘ 文字列として値を代入する場合、ダブルクォーテーションで囲む必要があるため
‘ Chr(34) を使ってダブルクォーテーションを生成し、数式として流し込むのが鉄則。
MsgBox “データの書き込みが完了しました。”
End Sub
ここがポイント!
- FormulaUプロパティ: 単に値を代入するのではなく、`.FormulaU` を使いましょう。Visioは「値」ではなく「数式」としてデータを管理しているため、これが最も堅牢です。
- Chr(34): 文字列を流し込む際は、必ずダブルクォーテーションで囲う必要があります。これを忘れると「数式エラー」でVisioが悲鳴を上げます。
—
3. 初学者が必ずハマる「3つの落とし穴」
現場で何度も見てきた、初心者が陥る「なぜか動かない」現象を解決します。
① そのプロパティ、本当に存在しますか?
シェイプデータが存在しない状態で `CellsU` を呼び出すと、エラーが発生します。
- 対策: `If vsoShape.CellExists(“Prop.AssetID.Value”, 0)` を使って、事前に存在チェックを入れましょう。
② Visioの保護機能(Lock)
図形がグループ化されていたり、保護(Protection)がかかっていると書き込みが拒否されます。
- 対策: 書き込み前に `vsoShape.CellsU(“LockDelete”).ResultIU = 0` のように、保護を解除する一工夫が必要です。
③ セルの名称は「ユニバーサル」で
Visio画面上で「資産番号」と表示されていても、内部名は `Prop.Row_1` かもしれません。
- 確認法: Visioの「開発」タブ → 「シェイプシートを表示」を開き、内部名を必ず確認してください。ここが全ての出発点です。
—
4. プロの視点:自動化の先へ
ここまでできれば、あなたはもうマクロの記録を卒業しています。
次に目指すべきは、「ExcelのリストからVisio図面を自動生成する」ことや、「図面のデータをボタン一つでSQLデータベースへ書き出す」といった統合管理です。
Visio VBAは、複雑なシステム構成図を「ただの絵」ではなく「生きているドキュメント」に変える魔法の杖です。
もしコードが動かなかったら、それはエラーではなく「あなたの知識が一段上のレベルに達するチャンス」です。まずは今回の `CellsU` を使い、自分の図形にIDを振ることから始めてみてください。
さあ、あなたのVisioを、ただの作図ツールから、真の設計プラットフォームへと進化させましょう。応援しています!
