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

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

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

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

分かりました。マクロで解決しましょう!
サンプルのダウンロード
インストール方法
操作マニュアル
仕様
1. プロジェクト概要
Excelシート上で選択された「2つのセル範囲(始点と終点)」の間を、指定されたスタイル(直線、カギ線、点線、二重線など)のコネクタで自動的に結ぶVBAツール。
単に線を引くだけでなく、カギ線の折れ曲がり位置の自動調整機能や、始点位置(セルの端か中央か)の制御機能を持つ。
2. ファイル構成
プロジェクトは以下のモジュールで構成すること。
| モジュール名 | 種類 | 役割 |
| Connect | 標準モジュール | コネクタ描画の計算ロジック、図形生成のメイン処理 |
| Setting | 標準モジュール | 線の太さ(通常・太線)を管理する定数定義 |
| DrawConnect | ユーザーフォーム | 線種、方向、始点位置などを指定するUI |
| ThisWorkbook | ThisWorkbook | 更新履歴の保持およびブックのエントリポイント |
| Sheet1 | ドキュメント | 標準のワークシート(特段のコードなし) |
3. モジュール詳細仕様
(1) Setting(標準モジュール)
ツール全体で使用する線の太さを定義する。
- 定数:
sngWeight: 通常および点線用の太さ(値:0.75)。sngHeavyWeight: 太線および二重線用の太さ(値:2.5)。
(2) Connect(標準モジュール)
プロシージャ: ShowDrawConnect / ShowDrawConnectRibbon
- ユーザーフォーム
DrawConnectをモードレスまたはモーダルで表示する(リボンコールバック対応)。
プロシージャ: AddConector
- 引数:
rngBegin(始点セル),rngEnd(終点セル),strType(線種),strDirection(方向),strStart(始点位置),blnAlignElbow(自動調整フラグ)。 - 機能: 指定条件に基づきコネクタを描画する。
- 描画ロジック(重要):
- 座標計算:
- 始点X/Y:
strStartが “Edge” ならセルの右端/下端、”Center” ならセルの中心とする。 - 終点X/Y: 常にセルの左端(右方向時)または上端(下方向時)の中心または端とする。
- 始点X/Y:
- 方向「Right(右)」の場合:
- 始点Yと終点Yが同じなら直線 (
msoConnectorStraight)。 - 異なる場合はカギ線 (
msoConnectorElbow) を描画。 - 自動調整 (
blnAlignElbow): カギ線のハンドル (Adjustments.Item(1)) を操作し、終点セルの1つ手前の列で折れ曲がるように比率計算を行う。
- 始点Yと終点Yが同じなら直線 (
- 方向「Down(下)」の場合(特殊実装):
- 単純に上から下へ描画するとカギ線の形状が意図しない形になるため、以下の手順で作成する。
- 一旦、幅と高さを入れ替えた状態で描画。
- 図形を「上下反転 (
Flip msoFlipVertical)」させる。 - 図形を「90度回転 (
IncrementRotation 90)」させる。 - 回転による位置ズレを補正するため、
IncrementLeft,IncrementTopで正しい位置へ移動させる。 - 自動調整有効時は、終点セルの1つ上の行で折れ曲がるようにハンドルを調整する。
- スタイルの適用:
- 色はテーマカラーの
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):- バリデーション:
SelectionがRangeであること。- 選択範囲のアドレス (
Selection.Address) をカンマで分割し、配列要素数が1(つまり2箇所)あること。満たさない場合は警告メッセージを表示。
- パラメータ取得:
- 分割したアドレスの1つ目を始点、2つ目を終点とする。
- 各オプションボタンの状態から、
strType,strDirection,strStart,blnAlignElbowの値を決定する。
- 呼び出し:
Connect.AddConectorをコールする。
- バリデーション:
(4) ThisWorkbook
- メタデータ:
- ツール名:「VAコネクタ」
- URL:
https://vba-assets.net/family-tree/ - 著作権:2020-2025 VBA アセット
- 更新履歴:
- Ver100 (作成) から Ver210 (リボン対応) までの履歴をコメントとして記載。特に「下方向描画の回転処理への変更」「始点が中央の場合のバグ修正」等の経緯を含める。
4. 機能要件詳細
- 選択チェック:
- Ctrlキーを押しながら離れた2つのセルを選択した状態で実行することを前提とする。選択が1箇所の範囲だけの場合はエラーメッセージを出すこと。
- 下方向カギ線の描画手法:
msoConnectorElbowを下方向に普通に描画すると、中間線が横に走ってしまう場合があるため、必ず「横向きに作って回転させる」ロジックを実装すること。その際、画面外へのはみ出し防止用マージン (EscapeLength) を考慮すること。
- カギ線の自動調整:
Adjustmentsプロパティは0.0~1.0の比率で指定するため、距離(ピクセル)から比率への計算式 ((全長 - ターゲットセル幅) / 全長) を実装すること。
- UI:
- 実行ボタン押下後もフォームは閉じず、連続して描画作業が行えるようにすること(閉じるボタンで終了)。


コメント
カギ線の角の位置を自動調節するように修正しました。(Ver110)
オプションの配置を標準モジュールに変更しました。(Ver120)
選択されたセル範囲の間にセル1つ分の間隔しかない場合にエラーが発生するバグを修正しました。(Ver121)
下向きの直線の場合にエラーが発生するバグを修正しました。(Ver122)
下向きのカギ線の方向の制御を図形を反転・回転させる方式に改めました。(Ver200)
細線の太さを設定できるようにしました。(Ver201)
図形回転時にウィンドウをはみ出す場合があるバグを修正しました。(Ver202)
アドイン版のVBAプロジェクト名を修正し、モジュール、プロシージャおよびコードに詳細なコメントを追加しました。(Ver203)
セルを選択していない場合には、メッセージを表示するようにしました。(Ver204)
リボンから起動するように変更しました。(Ver210)