矢印オートシェイプは調整が面倒

Excelで資料を作成する際に、ここからここへ、という明示をするために矢印のオートシェイプを使うことがあります。

こんな感じで表形式の左から右へ、みたいな感じとかですね。実はこの矢印は後述のマクロでやってます。3本引くのに10秒も掛かっていません。

通常はこのように左から右に、という具合に手で矢印を引くのですが、いろいろと難点があります。
水平、垂直になってない。
グリッドとずれる。
他の矢印とずれる。
と、思ったようにいきません。

この微調整に掛かる時間がもったいないですよね。

そこで、選択セル範囲の開始セルから終了セルにこんな感じで矢印のオートシェイプを引くマクロを紹介します。

私自身もクイックアクセスツールバーに登録して重宝しています。

色は赤で太さを1.5ポイントにしていますが、RGB関数と数字を1.5と書いてるソースなので、修正したい場合はそこだけ変えればOKです。


選択セルの開始セルから終了セルに矢印を引く関数

以下に紹介する矢印を引くマクロはいくつかの制限事項があります。

  1. セルを1つしか選択していない場合はそのセル内の左から右に矢印を引きます。
  2. 矢印はセルの高さの中央を開始と終了位置にしています。
  3. 矢印は赤色にしています。違う色にしたいときはRGB関数の値を変えてください。
  4. 矢印の太さは1.5ポイントです。これも数値を変えれば太さが変わります。



コード説明

考え方は以下のような流れです。

  1. 選択セル範囲の上下左右のセル位置を取得。
  2. アクティブセルを開始セルとし、その対角にあたるセルを終了セルとする。
  3. 開始セルが終了セルの左右、上下のどちらにあるかで矢印の開始と終了位置を設定する。
  4. 矢印を引く。

細かい処理はコメントに書いている通りです。考え方で難しいのは3番の矢印を引く開始横位置と終了横位置です。左から右に引く場合と右から左に引く場合で開始と終了の横位置が変わります。

なお、Office2003と2007あたりでAddConnector関数の挙動が異なっています。2003以前の場合は71行目を削除して73行目の方を使ってください。


使い方

1. 矢印を引きたい範囲を選択します。このとき、矢印を引きたい方向と同じ向きにセル範囲を選択します。この例ではA1セルを開始セルとしてC4セルまでを選択しています。

2. CreateArrowSelection()を実行します。

他にも以下のように開始セル(Start)から終了セル(End)に向かってセル範囲を選択した場合のパターンでも利用できます。