【エクセルVBA】選択した2つの図形を最短経路のカギ線で接続する

こんにちは、ヒガシです。

 

このページでは以下の動画に示すように、選択した既存の2図形を最短経路のカギ線で接続する方法をご紹介していきます。

図形間の位置関係によって接続線の始点、終点が変わっていることがわかると思います。

 

こんな感じで最短経路間を結ぶカギ線を作成できます。

 

あなたのやりたいことと一致していれば、ぜひ続きをご覧ください。

 

スポンサーリンク

VBAの実行環境を構築しておく

冒頭に紹介したことを実施するには、まずはVBAを実行可能な状態にしておく必要があります。

VBAを触ったことがないという方はまずは以下の記事を参考に実行環境を構築しておきましょう。

エクセルマクロ(VBA)の始め方!初心者向けに画像を使って詳細解説

 

スポンサーリンク

2図形のカギ線接続サンプルコード

それでは冒頭に紹介した動画の処理を実施可能なVBAコードをご紹介します。

Sub Connect_two_shape()
    shape1_name = Selection(1).Name
    shape2_name = Selection(2).Name
    min_length = 10000
    '最短距離の接続点を探す
    For i = 1 To 4
        For j = 1 To 4
            ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 0, 1, 0, 1).Select
            Selection.ShapeRange.ConnectorFormat.BeginConnect ActiveSheet.Shapes(shape1_name), i
            Selection.ShapeRange.ConnectorFormat.EndConnect ActiveSheet.Shapes(shape2_name), j
            L_line = Sqr(Selection.Width ^ 2 + Selection.Height ^ 2)
            If L_line < min_length Then
                min_length = L_line
                fini = i
                finj = j
            End If
            Selection.Delete
        Next
    Next
    ActiveSheet.Shapes.AddConnector(msoConnectorElbow, 0, 1, 0, 1).Select
    '最終的な接続線を作成する
    With Selection.ShapeRange
        .ConnectorFormat.BeginConnect ActiveSheet.Shapes(shape1_name), fini
        .ConnectorFormat.EndConnect ActiveSheet.Shapes(shape2_name), finj
        .Line.Weight = 3
        .Line.ForeColor.RGB = RGB(0, 0, 0)
    End With
End Sub

 

基本的にやっていることとしては以下の通りです。

①2図形がもつ4辺での中心点間距離をひとつひとつ計測し、最短距離となる辺どうしを探索します。

②最短経路となる辺どうしをカギ線で接続

 

スポンサーリンク

サンプルコードの実行方法

先ほど紹介したサンプルコードを実行するためには、あらかじめ2つの図形を選択しておき、その状態を維持した状態で先ほどのサンプルコードを実行すればOKです。

 

なお、通常であればマクロ実行ボタンを置いておくことでマクロ実行をすると思いますが、今回はあらかじめ図形を選択した状態からスタートしなければいけない都合上、マクロ実行ボタンを押すことができません。

 

対処法として、マクロ実行のショートカットキーを設定すると便利です。

ショートカットキーの設定方法は以下の通りです。

上記設定を行った場合は、2つの図形を選択した状態で、Ctrl + Shifr + Cで図形間を接続するカギ線を作成することが可能です。

 

スポンサーリンク

おわりに

というわけで今回は、選択した2図形間を最短距離で接続するカギ線を作成する方法をご紹介しました。

機能系統図等を作成する際にぜひご活用ください。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

ぜひ他の記事ものぞいてみてください。

コメント

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