世の中には「マクロの記録」という甘い蜜を吸い続けて、Visioの深淵に触れられないまま挫折する人が多すぎます。しかし、この記事を読んでいるあなたは違う。Visioという「図形の中にデータベースを隠し持つモンスター」を、VBAで手懐けようとしているのですね。
ようこそ、自動化の最前線へ。今日はVisio VBAにおける「最も重要で、最も誤解されている」シェイプデータ(旧カスタムプロパティ)の操作術を伝授します。
—
1. なぜ「CellsU」なのか?:Visioの心臓部を知る
Visioの図形(Shape)は、単なる線や四角ではありません。その内部には「ShapeSheet(シェイプシート)」という、Excelのシートのような数式エンジンが埋め込まれています。
VBAからこの内部データに触れるための唯一にして最強の武器が、`CellsU`プロパティです。
- Cells: セル(数式が入っている場所)を指す。
- U: Universal(ユニバーサル)のU。言語設定(日本語や英語など)に依存せず、常に英語表記のセル名を指定するための「世界標準」フラグです。
これを避けては、Visioの自動化は語れません。
—
2. 現場で使える「シェイプデータ流し込み」コード
Excelからデータを吸い上げ、図形にIDや属性を書き込む。この一連の流れを最も堅牢に書くコードがこれです。まずはこれをコピペして、自分の環境で動かしてみてください。
Sub UpdateShapeData()
Dim shp As Visio.Shape
Dim vsoCell As Visio.Cell
‘ 選択中の図形を取得(まずは1つだけ選択して実行してください)
If Visio.ActiveWindow.Selection.Count = 0 Then
MsgBox “図形を選択してください!”, vbExclamation
Exit Sub
End If
Set shp = Visio.ActiveWindow.Selection(1)
‘ プロパティ名(Prop.Row_Name)を指定して値を書き込む
‘ ここで重要なのは “Prop.LabelName.Value” という書き方です
‘ Prop. はシェイプデータの接頭辞、Valueは値そのものを指します
‘ 存在確認をしてから書き込むのが「プロ」の流儀
If shp.CellExistsU(“Prop.AssetID”, Visio.visExistsAnywhere) Then
Set vsoCell = shp.CellsU(“Prop.AssetID.Value”)
vsoCell.FormulaU = “=STR(12345)” ‘ 数式として書き込むのがVisio流
Else
MsgBox “対象のシェイプデータ行が存在しません。”
End If
MsgBox “データの書き込みが完了しました。”
End Sub
—
3. 初学者が必ずハマる「3つの落とし穴」
多くの人がここで挫折します。しかし、仕組みさえ分かれば怖くありません。
① 「FormulaU」を使う意味
値を入れるとき、`Value`プロパティを直接いじりたくなるでしょう? しかし、Visioでは`FormulaU`を使ってください。「=100」や「=STR(“ABC”)」のように、数式として文字列を流し込むのがVisioの作法です。これにより、図形同士の連動計算が崩れなくなります。
② セルが存在しない恐怖
図形にその名前のシェイプデータ行がないのに`CellsU`を叩くと、容赦なくエラーが飛んできます。上記のコードのように、`CellExistsU`で事前に生存確認をする癖をつけてください。
③ 「Prop.名前」の正体
シェイプシートを開くとわかりますが、シェイプデータは「Prop.行名」という形で管理されています。Excelから流し込む際、この行名が図形側と一致していないと、データは宙に浮きます。命名規則は厳格に運用しましょう。
—
4. 伝説のエンジニアからのアドバイス:次のステップへ
ここをクリアしたあなたは、もう「マクロの記録」を卒業しました。次に目指すべきは、「Excelのワークシートをループで回し、Visioの図形をIDで検索して一括流し込みする」という高度な連携です。
1. データの構造化: Excelの1行を1つの図形に対応させる。
2. IDマッチング: 図形の`Prop.ID`とExcelのID列を比較する。
3. 高速化: 画面描画を停止する(`Application.ScreenUpdating = False`)ことで、数百個の図形更新を数秒で終わらせる。
Visioは、ただの作図ツールではありません。「ビジュアル化されたデータベース」です。そのデータを制御する鍵を、あなたは今、手にしました。
さあ、次の図面をただの絵にするか、それとも「動く情報資産」にするか。すべてはあなたのコード次第です。何か分からないことがあれば、いつでもまた聞きに来てください。応援していますよ。
