水たまりは希望を写している

Excel / Google スプレッドシートで挿入・削除に追従する特定セルへのリンクを作成するには

画像左に表計算ソフトのスクリーンショット。右に「挿入・削除に追従するセルへのリンク」というテキスト。テキストの下に Google スプレッドシートと Excel のアイコン。画像下部に関数の記述例のスクリーンショット。

表計算ソフト (Excel / Google スプレッドシート) で HYPERLINK 関数を使うと、特定のセルへのリンクを作ることができる。

=HYPERLINK("#A1", "リンクテキスト")

Excel の場合、セル番地をそのまま第 1 引数に指定する。

=HYPERLINK("#gid=123456789&range=A1", "リンクテキスト")

Google スプレッドシートの場合、例の通りだと 123456789 というシートの A1 というセルへジャンプするリンクになる。gid の数字はアドレスバーで確認可能。

しかしこれは、行や列の挿入・削除をするとズレてしまう。このブログ記事では、挿入・削除に追従するリンクの作り方を解説する。

単一セルへのリンク

Excel のスクリーンショット。数式バーからセルに向かって矢印が伸びている。矢印のそばに「セル番地」「リンクテキスト」の文字。
=HYPERLINK("#"&ADDRESS(ROW(<セル番地>), COLUMN(<セル番地>), 4), "リンクテキスト")
=HYPERLINK("#gid=<シートのID>&range="&ADDRESS(ROW(<セル番地>), COLUMN(<セル番地>), 4), "リンクテキスト")

ADDRESS 関数は、行と列の番号からセル番地を生成する関数。ROWCOLUMN 関数を使用して、セル番地から番号を生成している。

セル範囲へのリンク

=HYPERLINK("#"&ADDRESS(ROW(<セル番地 1>), COLUMN(<セル番地 1>), 4)&":"&ADDRESS(ROW(<セル番地 2>), COLUMN(<セル番地 2>), 4), "リンクテキスト")
=HYPERLINK("#gid=<シートの ID>&range="&ADDRESS(ROW(<セル番地 1>), COLUMN(<セル番地 1>), 4)&":"&ADDRESS(ROW(<セル番地 2>), COLUMN(<セル番地 2>), 4), "リンクテキスト")

<セル番地 1>:<セル番地 2> という書式で範囲を指定できるので、その通りに記述する。これも ADDRESS 関数の組み合わせで特段難しいことはしていない。

行へのリンク

=HYPERLINK("#"&ROW(<セル番地>)&":"&ROW(<セル番地>), "リンクテキスト")
=HYPERLINK("#gid=<シートの ID>&range="&ROW(<セル番地>)&":"&ROW(<セル番地>), "リンクテキスト")

1:1 というような書式で行へのリンクを作れるので、ROW 関数を使用して行番号を取得している。違う行にあるセル番地をそれぞれ指定すれば、その範囲の選択になる

列へのリンク

=HYPERLINK("#"&SUBSTITUTE(ADDRESS(1,COLUMN(<セル番地),4),1,)&":"&SUBSTITUTE(ADDRESS(1,COLUMN(<セル番地>),4),1,), "リンクテキスト")
=HYPERLINK("#gid=<シートの ID>&range="&SUBSTITUTE(ADDRESS(1,COLUMN(<セル番地),4),1,)&":"&SUBSTITUTE(ADDRESS(1,COLUMN(<セル番地>),4),1,), "リンクテキスト")

A:A というような書式で列へのリンクが作れる。列番号のアルファベットを取得する関数がないようなので、ADDRESS 関数で A1 というようなセル番地を作った上で、SUBSTITUTE 関数で A11 を削除して列番号を取得している。

これも違う列にあるセル番地をそれぞれ指定すれば、その範囲の選択になる

まとめ

この方法でリンクを作れば、行や列の挿入・削除をしても追従する。まだ編集する可能性があって、なおかつ挿入・削除・入れ替えなどが発生するならこの方法でリンクした方が良いかも。

セル番地をそのままセル番地として出力する関数があれば楽なのだが (CELL 関数が近いが使えない)、それができないため少し回りくどい方法を取っている。

ちなみに、Google スプレッドシートの記法を、そのまま Excel で使うことができる (その逆はできない)。gid とかのパラメーターは勝手に無視してくれるみたい (どういう実装?)。