【入門編】【初心者】Shape.CellsUによるカスタムプロパティの読み書き:Excelデータを図形に流し込む第一歩 – Visio VBA解析バイブル

スポンサーリンク

世の中には「マクロの記録」という甘い蜜を吸い続けて、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は、ただの作図ツールではありません。「ビジュアル化されたデータベース」です。そのデータを制御する鍵を、あなたは今、手にしました。

さあ、次の図面をただの絵にするか、それとも「動く情報資産」にするか。すべてはあなたのコード次第です。何か分からないことがあれば、いつでもまた聞きに来てください。応援していますよ。

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