VAコネクト:家系図の線を簡単入力(エクセルVBA)

サンプル

家系図の作成に手間取っているみたいですね?

そうなんです。どうやって作るのがいいんでしょうね?

そうですね。人によっていろんなやり方があるようですが、私はエクセルのセルに文字を入力してから、図形を使って線を追加しています。

私はエクセルで図形を描くのが苦手なんです。

分かりました。マクロで解決しましょう!

サンプルのダウンロード

インストール方法

Excel版VBAアドインのインストール方法

操作マニュアル

VAサーチシリーズ(統合版) 操作マニュアル

仕様

1. プロジェクト概要

Excelシート上で選択された「2つのセル範囲(始点と終点)」の間を、指定されたスタイル(直線、カギ線、点線、二重線など)のコネクタで自動的に結ぶVBAツール。

単に線を引くだけでなく、カギ線の折れ曲がり位置の自動調整機能や、始点位置(セルの端か中央か)の制御機能を持つ。

2. ファイル構成

プロジェクトは以下のモジュールで構成すること。

モジュール名種類役割
Connect標準モジュールコネクタ描画の計算ロジック、図形生成のメイン処理
Setting標準モジュール線の太さ(通常・太線)を管理する定数定義
DrawConnectユーザーフォーム線種、方向、始点位置などを指定するUI
ThisWorkbookThisWorkbook更新履歴の保持およびブックのエントリポイント
Sheet1ドキュメント標準のワークシート(特段のコードなし)

3. モジュール詳細仕様

(1) Setting(標準モジュール)

ツール全体で使用する線の太さを定義する。

  • 定数:
    • sngWeight: 通常および点線用の太さ(値: 0.75)。
    • sngHeavyWeight: 太線および二重線用の太さ(値: 2.5)。

(2) Connect(標準モジュール)

プロシージャ: ShowDrawConnect / ShowDrawConnectRibbon

  • ユーザーフォーム DrawConnect をモードレスまたはモーダルで表示する(リボンコールバック対応)。

プロシージャ: AddConector

  • 引数: rngBegin (始点セル), rngEnd (終点セル), strType (線種), strDirection (方向), strStart (始点位置), blnAlignElbow (自動調整フラグ)。
  • 機能: 指定条件に基づきコネクタを描画する。
  • 描画ロジック(重要):
    1. 座標計算:
      • 始点X/Y: strStart が “Edge” ならセルの右端/下端、”Center” ならセルの中心とする。
      • 終点X/Y: 常にセルの左端(右方向時)または上端(下方向時)の中心または端とする。
    2. 方向「Right(右)」の場合:
      • 始点Yと終点Yが同じなら直線 (msoConnectorStraight)。
      • 異なる場合はカギ線 (msoConnectorElbow) を描画。
      • 自動調整 (blnAlignElbow): カギ線のハンドル (Adjustments.Item(1)) を操作し、終点セルの1つ手前の列で折れ曲がるように比率計算を行う。
    3. 方向「Down(下)」の場合(特殊実装):
      • 単純に上から下へ描画するとカギ線の形状が意図しない形になるため、以下の手順で作成する。
      • 一旦、幅と高さを入れ替えた状態で描画。
      • 図形を「上下反転 (Flip msoFlipVertical)」させる。
      • 図形を「90度回転 (IncrementRotation 90)」させる。
      • 回転による位置ズレを補正するため、IncrementLeft, IncrementTop で正しい位置へ移動させる。
      • 自動調整有効時は、終点セルの1つ上の行で折れ曲がるようにハンドルを調整する。
    4. スタイルの適用:
      • 色はテーマカラーの msoThemeColorText1
      • strType に応じて DashStyle (点線)、Weight (Settingモジュールの定数)、Style (二重線 msoLineThinThin) を適用する。

(3) DrawConnect(ユーザーフォーム)

  • コントロール構成:
    • 線種選択 (OptionButton1~4): 細線(Normal), 点線(Dash), 太線(Heavy), 二重線(Double)。
    • 方向選択 (OptionButton5~6): 右方向(Right), 下方向(Down)。
    • 始点位置 (OptionButton7~8): 外周(Edge), 中央(Center)。
    • 調整 (CheckBox1): カギ線の位置を合わせる。
    • 実行ボタン (CommandButton1)
    • 閉じるボタン (CommandButton2)
  • 実行ロジック (CommandButton1_Click):
    1. バリデーション:
      • SelectionRange であること。
      • 選択範囲のアドレス (Selection.Address) をカンマで分割し、配列要素数が1(つまり2箇所)あること。満たさない場合は警告メッセージを表示。
    2. パラメータ取得:
      • 分割したアドレスの1つ目を始点、2つ目を終点とする。
      • 各オプションボタンの状態から、strType, strDirection, strStart, blnAlignElbow の値を決定する。
    3. 呼び出し:
      • Connect.AddConector をコールする。

(4) ThisWorkbook

  • メタデータ:
    • ツール名:「VAコネクタ」
    • URL:https://vba-assets.net/family-tree/
    • 著作権:2020-2025 VBA アセット
  • 更新履歴:
    • Ver100 (作成) から Ver210 (リボン対応) までの履歴をコメントとして記載。特に「下方向描画の回転処理への変更」「始点が中央の場合のバグ修正」等の経緯を含める。

4. 機能要件詳細

  1. 選択チェック:
    • Ctrlキーを押しながら離れた2つのセルを選択した状態で実行することを前提とする。選択が1箇所の範囲だけの場合はエラーメッセージを出すこと。
  2. 下方向カギ線の描画手法:
    • msoConnectorElbow を下方向に普通に描画すると、中間線が横に走ってしまう場合があるため、必ず「横向きに作って回転させる」ロジックを実装すること。その際、画面外へのはみ出し防止用マージン (EscapeLength) を考慮すること。
  3. カギ線の自動調整:
    • Adjustments プロパティは 0.01.0 の比率で指定するため、距離(ピクセル)から比率への計算式 ((全長 - ターゲットセル幅) / 全長) を実装すること。
  4. UI:
    • 実行ボタン押下後もフォームは閉じず、連続して描画作業が行えるようにすること(閉じるボタンで終了)。

コメント

  1. 管理人 より:

    カギ線の角の位置を自動調節するように修正しました。(Ver110)

  2. 管理人 より:

    オプションの配置を標準モジュールに変更しました。(Ver120)

  3. 管理人 より:

    選択されたセル範囲の間にセル1つ分の間隔しかない場合にエラーが発生するバグを修正しました。(Ver121)

  4. 管理人 より:

    下向きの直線の場合にエラーが発生するバグを修正しました。(Ver122)

  5. 管理人 より:

    下向きのカギ線の方向の制御を図形を反転・回転させる方式に改めました。(Ver200)

  6. 管理人 より:

    細線の太さを設定できるようにしました。(Ver201)

  7. 管理人 より:

    図形回転時にウィンドウをはみ出す場合があるバグを修正しました。(Ver202)

  8. 管理人 より:

    アドイン版のVBAプロジェクト名を修正し、モジュール、プロシージャおよびコードに詳細なコメントを追加しました。(Ver203)

  9. 管理人 より:

    セルを選択していない場合には、メッセージを表示するようにしました。(Ver204)

  10. 管理人 より:

    リボンから起動するように変更しました。(Ver210)

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