[小ネタ]スプレッドシートで関数で別シートへのリンクを付けてみた
こんにちは、リサリサです。スプレッドシートの小ネタです。
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&"へのリンク")」のように、動的にもできました!
最後に
ただリンクを貼りたいだけなのに、なかなか苦労しました……。もっと簡単に貼れる方法があったら教えてください。どなたかのお役に立てれば幸いです。