Excel / Google スプレッドシートで挿入・削除に追従する特定セルへのリンクを作成するには
表計算ソフト (Excel / Google スプレッドシート) で HYPERLINK
関数を使うと、特定のセルへのリンクを作ることができる。
=HYPERLINK("#A1", "リンクテキスト")
Excel の場合、セル番地をそのまま第 1 引数に指定する。
=HYPERLINK("#gid=123456789&range=A1", "リンクテキスト")
Google スプレッドシートの場合、例の通りだと 123456789
というシートの A1
というセルへジャンプするリンクになる。gid
の数字はアドレスバーで確認可能。
しかしこれは、行や列の挿入・削除をするとズレてしまう。このブログ記事では、挿入・削除に追従するリンクの作り方を解説する。
単一セルへのリンク
=HYPERLINK("#"&ADDRESS(ROW(<セル番地>), COLUMN(<セル番地>), 4), "リンクテキスト")
=HYPERLINK("#gid=<シートのID>&range="&ADDRESS(ROW(<セル番地>), COLUMN(<セル番地>), 4), "リンクテキスト")
ADDRESS
関数は、行と列の番号からセル番地を生成する関数。ROW
と COLUMN
関数を使用して、セル番地から番号を生成している。
セル範囲へのリンク
=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
関数で A1
の 1
を削除して列番号を取得している。
これも違う列にあるセル番地をそれぞれ指定すれば、その範囲の選択になる。
まとめ
この方法でリンクを作れば、行や列の挿入・削除をしても追従する。まだ編集する可能性があって、なおかつ挿入・削除・入れ替えなどが発生するならこの方法でリンクした方が良いかも。
セル番地をそのままセル番地として出力する関数があれば楽なのだが (CELL
関数が近いが使えない)、それができないため少し回りくどい方法を取っている。
ちなみに、Google スプレッドシートの記法を、そのまま Excel で使うことができる (その逆はできない)。gid
とかのパラメーターは勝手に無視してくれるみたい (どういう実装?)。