[小ネタ]スプレッドシートで関数で別シートへのリンクを付けてみた

2022.07.07

こんにちは、リサリサです。スプレッドシートの小ネタです。

Excelで別シートへリンクを貼る時、「=HYPERLINK("#シート2!A1")」とするとリンクを貼れるのですが、スプレッドシートで同じことをすると、クリックしても何も起こりません…。

でも一個一個リンクを貼るのはなかなかめんどう…

関数で済ましたいな…と頑張りました。意外にめんどうだったので、記事にしてみます。

したい事

関数で別シートへのリンクを貼りたい。目次的なのが作りたい。

やってみた

色々試してみたのですが、関数のみでは無理で自作の関数が必要なようでした。

Excelでは、「#シート名」というのがシートへのリンクとして用意されているのですが、スプレッドシートでは、別シートへのリンクは、「#gid=xxx」とする必要があり、そのxxxにはランダムな数字が入ります。

シートを開いたときのURLの最後の数字です。

https://docs.google.com/spreadsheets/d/xxxxxxxx/edit#gid=154425xxxx

シート名ではなくランダムな数字なので、この数字をなんとかして取得する必要があります。

関数を作る

「拡張機能」⇒「Apps Script」からスクリプトエディタを開きます。

こんな画面が開きます。

コードの部分にこれを貼り付けます。

function sid(sheetName) {
  return SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName).getSheetId();
}

sheetNameの名前のシートのsidを取得しています。

「デプロイ」から「新しいデプロイ」を選択します。

種類の選択から「ライブラリ」を選択します。これで、↑で書いたファンクションが関数のように使えます。

「デプロイ」します

使ってみる

=sid("シート2")」とすると、シート2のsidが表示されるようになりました。

リンクを貼ってみる

=HYPERLINK("#gid="&sid("シート2"),"シート2へのリンク")」とすると、リンク先が「シート2」と表示されるようになりました。

クリックするとちゃんとシート2に移動します。

「=HYPERLINK("#gid="&sid(B5),B5&"へのリンク")」のように、動的にもできました!

最後に

ただリンクを貼りたいだけなのに、なかなか苦労しました……。もっと簡単に貼れる方法があったら教えてください。どなたかのお役に立てれば幸いです。