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

スポンサーリンク

Visio VBAを支配せよ:Shape.CellsUで図形データに魂を吹き込む「極限の作法」

Visioを単なる「お絵かきツール」だと思っているなら、今すぐその認識を捨てろ。Visioは、「構造化されたグラフィカル・データベース」だ。

業務自動化エンジニアとして多くの現場を見てきたが、初心者が最初に躓くのは「図形へのデータ注入」だ。`Cells`プロパティを適当に叩き、動いたことに満足してコードを放置する。その結果、数ヶ月後に図形が肥大化し、再利用もままならない「ゴミ溜め」と化す。

今日は、Excelから図形へデータを流し込むための、「壊れない、汚れない、プロの作法」を伝授する。

1. なぜ「CellsU」なのか? — 開発者が知るべき絶対原則

Visio VBAでプロパティ(シェイプデータ)を操作する際、`Cells`ではなく必ず`CellsU`を使うこと。これが鉄則だ。

  • Cells: システムのロケール設定(OSの言語)に依存する。日本語環境で動いたコードが、英語環境のPCではエラーを吐く。
  • CellsU: Universal(ユニバーサル)の意。内部的な英語名(U-Name)で直接アクセスするため、環境に依存せず、世界中どこへ持っていっても動作する。

我々プロフェッショナルは、移植性と堅牢性を担保するために`CellsU`一択で開発を行う。

2. 現場で使える「実戦的コード」の設計

ただ動くだけのコードは不要だ。エラーハンドリングを怠らず、シェイプデータが存在しない場合でもクラッシュしない「守りのコード」を書くのがアーキテクトの矜持だ。

以下のコードは、指定したシェイプの「ID」というプロパティに値を書き込む関数だ。

‘ @brief シェイプデータを安全に更新する関数
‘ @param shp 対象のVisio Shapeオブジェクト
‘ @param propName シェイプデータのラベル名
‘ @param propValue 書き込む値
Public Sub WriteShapeData(ByRef shp As Visio.Shape, ByVal propName As String, ByVal propValue As Variant)
Dim cellName As String

‘ シェイプデータは”Prop.ラベル名”という形式で管理される
cellName = “Prop.” & propName

‘ 存在確認:いきなり書き込まず、セルが存在するかチェックする
If shp.CellExistsU(cellName, visExistsAnywhere) Then
‘ 書き込み処理
shp.CellsU(cellName).FormulaU = Chr(34) & propValue & Chr(34)
Else
‘ ここでエラーログを出力する設計にするのがプロの流儀
Debug.Print “Warning: Property ‘” & propName & “‘ not found in shape: ” & shp.Name
End If
End Sub

なぜこの書き方なのか?

1. `FormulaU`の使用: `ResultStr`ではなく`FormulaU`を使うことで、Excelの数式のように値を評価・確定させることができる。
2. `Chr(34)`の囲み: 文字列値を書き込む際、Visioの内部形式に合わせるためにダブルクォーテーションで囲む必要がある。これを忘れると、「名前未定義エラー」の罠にハマる。
3. `CellExistsU`による防壁: 存在しないプロパティを叩いてVBAを強制終了させるのは三流の仕事だ。

3. 業務効率化へのステップ:Excel連携の勘所

Excelからデータを流し込む際、初心者はループ内で何度も`ActivePage.Shapes(i)`を呼び出しがちだ。これは非常に低速である。

アーキテクトの戦略:

  • 事前バインド: 毎回`Application`や`Document`を走査せず、一度変数に格納する。
  • 例外処理: `On Error Resume Next`を多用しない。個別の`CellExistsU`チェックで論理的に回避する。
  • データ構造: Excel側は「ID」を主キー(Key)とし、Dictionaryオブジェクトでメモリ上に展開してからVisioを操作せよ。ディスクI/OとCOMオブジェクトへのアクセス回数を最小化することこそが、実行速度を劇的に向上させる唯一の道だ。

4. 最後に:エンジニアへの提言

自動化ツールは「作った時」がゴールではない。「後から修正や機能追加が容易であること」が、真の保守性だ。

今回紹介した`WriteShapeData`のような小さなパーツを積み重ね、独自のライブラリ(モジュール)を構築せよ。一度書いたコードは二度書くな。それが、Visioという複雑怪奇なツールを、あなたの強力な武器に変えるための第一歩だ。

次は、これを使って「Excelから図形を自動配置する」技術について語ろうか。準備ができたら、また来い。現場からは以上だ。

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