導入
業務資料で組織図やフローチャートを作成する際、図形を一つひとつ手作業で配置し、コネクタでつなぐのは非常に手間がかかりますよね。特に図形の位置を微調整するたびに線が外れたり、レイアウトが崩れたりして時間を浪費した経験はありませんか?
今回は、Excel VBAを使って「図形同士をコネクタで自動接続する」方法を解説します。この技術を習得すれば、大量の図形を扱う資料作成を一瞬で終わらせることができ、レイアウト変更にも強いドキュメント作成が可能になります。
基礎知識
Excelの「コネクタ」とは、図形同士をくっつけて、片方を動かしても線が追従するようにする特殊な線のことです。VBAでこれを操作するには、ShapeオブジェクトのConnectorFormatプロパティを使用します。
特に重要なメソッドは以下の2つです。
1. ConnectorConnect:コネクタの始点と終点を、特定の図形の接続サイト(接続点)に固定します。
2. RerouteConnections:図形を移動させた後、コネクタの経路を最短距離に再計算させます。
実装/解決策
図形を自動接続するには、まず「コネクタ(線)」をシートに追加し、そのコネクタに対して接続対象となる「始点となる図形」と「終点となる図形」を指定します。接続には、各図形の接続サイト番号(ConnectionSite)を指定する必要があります。通常、図形の中心や四辺の中央に配置されており、サイト番号「1」を指定するのが一般的です。
サンプルプログラム
以下のコードは、シート上に2つの四角形を作成し、それらをコネクタで自動的に接続するサンプルです。標準モジュールに貼り付けて実行してください。
Sub ConnectShapesAutomatically()
Dim ws As Worksheet
Dim shp1 As Shape, shp2 As Shape, conn As Shape
Set ws = ActiveSheet
‘ 1. 2つの図形を作成
Set shp1 = ws.Shapes.AddShape(msoShapeRectangle, 100, 100, 100, 50)
shp1.TextFrame.Characters.Text = “開始点”
Set shp2 = ws.Shapes.AddShape(msoShapeRectangle, 300, 200, 100, 50)
shp2.TextFrame.Characters.Text = “終了点”
‘ 2. コネクタを追加(線の種類はmsoConnectorStraight:直線)
Set conn = ws.Shapes.AddConnector(msoConnectorStraight, 0, 0, 0, 0)
‘ 3. コネクタをそれぞれの図形に接続
‘ ConnectorConnect メソッド: (コネクタ, 接続サイト番号, 図形, 接続サイト番号)
‘ 接続サイト番号は通常1から始まります
conn.ConnectorFormat.ConnectBeginShape shp1, 1
conn.ConnectorFormat.ConnectEndShape shp2, 1
‘ 4. 経路を最適化する
conn.RerouteConnections
MsgBox “図形の接続が完了しました。”
End Sub
応用・注意点
注意点1:接続サイト番号の指定
図形には複数の接続サイトが存在します。上記のコードでは「1」を指定していますが、図形の形状によっては「1」が左側、あるいは上側など異なります。もし意図しない場所から線が出ている場合は、サイト番号を2や3に変更して調整してください。
応用テクニック:RerouteConnectionsの活用
大量の図形をVBAで一気に動かした後、線がぐちゃぐちゃに絡まってしまうことがあります。そんな時は、最後に conn.RerouteConnections を実行することで、Excelが自動的に「最も美しい経路」に直してくれます。これをループ処理の最後に入れるのが、現場で使えるプロのテクニックです。
ぜひ、この機能を活用して、資料作成の自動化に挑戦してみてください!
