フローチャートやマニュアルを作っている際、
折れ線矢印(正式名称:カギ線矢印コネクタ)をよく使うのですが、
なぜかこの矢印は2回曲がるやつしか用意されていません。

頂点の編集で作れるは作れるんですが、
再度位置調整をすると再び2回折れ曲がりやがります(#^ω^)

残念ながらこの根本的な解決策はないようなのですが、
以下のようにガイド図形を作って対応することが可能です。

今回はこの「矢印コネクタ+ガイド」3点セットを自動挿入するマクロを紹介します。
実行型の便利マクロですので、
Excel起動時に裏で開かれる「個人用マクロブック」などに搭載して使ってください。
ツールバーやリボンにボタン配置すると便利です。
マクロの仕様
このマクロは「2つのセルを選択して実行」する仕様のマクロです。
第1選択セルを始点、第2選択セルを終点(矢印部分)として、
ガイド図形2つと、その間を接続したコネクタ図形を挿入します。

挿入されたガイド図形はデフォルトで「オブジェクトを印刷」がOFFなので、
このまま使用しても印刷時には表示されません。
加えて画面上で消したい場合にも備え、
ガイド図形表示をON/OFFするマクロもセットで作成しています。

あとはついでに「ガイド図形を一括削除するマクロ」も付けました。
(これはコネクタがもう編集できなくなるのであまり使用しない方がよさそうですが)
3つセットでリボンやツールバーにセットして使っていただければと思います。
余談ですが、自作マクロを登録した際の初期アイコン↓

これがこんなにマッチするマクロも他にないんじゃないでしょうか笑
ソースコード
' コネクタ図形セット■→■の挿入 Sub 矢印コネクタとコネクタガイド図形のセットを挿入する() If Selection.Areas.Count <> 2 Then MsgBox "2つのセルをCtrlキーで選択して実行してください。" Exit Sub End If Dim Begin基準セル As Range: Set Begin基準セル = Selection.Areas(1).Cells(1) Dim End基準セル As Range: Set End基準セル = Selection.Areas(2).Cells(1) Dim Begin図形 As Shape Set Begin図形 = ActiveSheet.Shapes.AddShape _ (msoShapeRectangle, Begin基準セル.Left, Begin基準セル.Top, 15, 15) Begin図形.ShapeStyle = msoShapeStylePreset28 Begin図形.Name = "コネクタ始点ガイド" Begin図形.ControlFormat.PrintObject = False ' ガイドは印刷しない Dim End図形 As Shape Set End図形 = ActiveSheet.Shapes.AddShape _ (msoShapeRectangle, End基準セル.Left, End基準セル.Top, 15, 15) End図形.ShapeStyle = msoShapeStylePreset28 End図形.Name = "コネクタ終点ガイド" End図形.ControlFormat.PrintObject = False ' ガイドは印刷しない Dim →図形 As Shape Set →図形 = ActiveSheet.Shapes.AddConnector _ (msoConnectorElbow, 10, 10, 10, 10) ' 数値意味なし →図形.Line.EndArrowheadStyle = msoArrowheadTriangle ' 右下→↓方向への接続 If Begin基準セル.Row <= End基準セル.Row _ And Begin基準セル.Column <= End基準セル.Column Then →図形.ConnectorFormat.BeginConnect Begin図形, 4 →図形.ConnectorFormat.EndConnect End図形, 1 End If ' 右上→↑方向への接続 If Begin基準セル.Row >= End基準セル.Row _ And Begin基準セル.Column <= End基準セル.Column Then →図形.ConnectorFormat.BeginConnect Begin図形, 4 →図形.ConnectorFormat.EndConnect End図形, 3 End If ' 左下↓←方向への接続 If Begin基準セル.Row <= End基準セル.Row _ And Begin基準セル.Column >= End基準セル.Column Then →図形.ConnectorFormat.BeginConnect Begin図形, 2 →図形.ConnectorFormat.EndConnect End図形, 1 End If ' 左上↑←方向への接続 If Begin基準セル.Row >= End基準セル.Row _ And Begin基準セル.Column >= End基準セル.Column Then →図形.ConnectorFormat.BeginConnect Begin図形, 2 →図形.ConnectorFormat.EndConnect End図形, 3 End If End Sub
' ガイド図形の表示切替 Sub コネクタガイド図形の表示を切り替える() ' 現在のON/OFFを取得 Dim is対象図形が存在 As Boolean Dim is現在の表示 As Boolean Dim シェイプ As Shape For Each シェイプ In ActiveSheet.Shapes If InStr(シェイプ.Name, "コネクタ始点ガイド") <> 0 _ Or InStr(シェイプ.Name, "コネクタ終点ガイド") <> 0 Then is現在の表示 = シェイプ.Visible is対象図形が存在 = True Exit For End If Next If is対象図形が存在 = False Then Exit Sub ' 表示状態を変更 For Each シェイプ In ActiveSheet.Shapes If InStr(シェイプ.Name, "コネクタ始点ガイド") <> 0 _ Or InStr(シェイプ.Name, "コネクタ終点ガイド") <> 0 Then シェイプ.Visible = Not is現在の表示 End If Next End Sub
' ガイド図形の一括削除 Sub コネクタガイド図形を一括削除する() If MsgBox("この機能を実行した場合はガイド図形の復元は出来ません。実行してよろしいですか?", vbYesNo) = vbYes Then Dim シェイプ As Shape For Each シェイプ In ActiveSheet.Shapes If InStr(シェイプ.Name, "コネクタ始点ガイド") <> 0 _ Or InStr(シェイプ.Name, "コネクタ終点ガイド") <> 0 Then シェイプ.Delete End If Next End If End Sub
コードの解説
以下の手順をシンプルに実行しているコードです。
- 選択セルから始点と終点を取得
- 始点と終点に印刷をOFFにした四角形(ガイド図形)を挿入
- 矢印コネクタを挿入
- ガイド図形からガイド図形へコネクタを接続
割とストレートな処理しかしていませんので、
それぞれのコードのプロパティやメソッドの仕様は割愛します。
ガイド図形の名称を「コネクタ始点/終点ガイド」に統一することで、
もう2つのマクロ「ガイドの表示切替と一括削除」を動かしています。
※ Shapeは同一名称を許します。
ちなみにShapeオブジェクトのコネクタに関するメソッドには、
図形間を最短パスで結ぶRerouteConnectionsという便利なものがあります。
なので一見、コネクタを結ぶコードは
→図形.ConnectorFormat.BeginConnect Begin図形, 1 ' ← 一旦この数字は適当でOK →図形.ConnectorFormat.EndConnect End図形, 1 →図形.RerouteConnections ' ここで最短経路で再接続
これで一発で済むように見えますが、、、
残念ながらこのメソッドは

今回問題となった現象を見事に再現してきます(#^ω^)
このため実際のコードは4方向で分岐させるしかありませんでした。
本当は8種類ある(例えば右上なら→↑と↑→が2つある)のですが、
個人的によく使う4方向で実装をしました。
別方向を使いたいときは手でつなぎ直すか、
行と列どちらの距離が大きいかで分岐させるなどマクロをカスタムしてください。
おまけですが、矢印コネクタのShape変数名で遊んでみました。
Dim →図形 As Shape
わかりやすいっちゃあわかりやすいですが、
普通に入力しづらいですのでご利用は計画的に。