Googleスプレッドシートの特定のシートへのリンク


47

多くのシートと目次を含む複雑なGoogleスプレッドシートがあります。クリックしてシート名に直接移動できるように、シート名へのリンクを作成する方法はありますか?つまり、セル「sheet5」をクリックすると、sheet5に切り替わりますか?


1
Googleスプレッドシートにはこのようなオプションがあります。[挿入]-> [リンク]を選択し、このスプレッドシートで[スプレッドシート]を選択できます。残念ながら、これを回答として投稿するのに必要な評判はありません。
ボリスStrandjev

回答:


59

Googleスプレッドシートで別のシートに切り替えるときは、ブラウザのアドレスバーのURLに注意してください。URLの最後に次のようなものが表示されます。

#gid=0

この番号は、シートを切り替えると変わり、表示するシートを指定します。URL全体をコピーし、次の式を使用してハイパーリンクを作成します。

=hyperlink("https://docs.google.com/spreadsheet/ccc?key=0AsaQpHJE_LShcDJ0dWNudHFZWVJqS1dvb3FLWkVrS0E#gid=0", "LINK TEXT")

スクリプト付き

この質問を最初に書いて以来、この質問についてよく考えてきました。スクリプトを使用した解決策を思いつきました。

スプレッドシートを開いた状態で、[ ツール ]メニュー、[ スクリプトエディター... ]の順にクリックします。このすべてのコードをエディターに貼り付けます。

function onOpen(event) {
  var ss = event.source;
  var menuEntries = [];
  menuEntries.push({name: "Go to sheet...", functionName: "showGoToSheet"});
  ss.addMenu("Tasks", menuEntries);
}

function showGoToSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var allsheets = ss.getSheets();
  var app = UiApp.createApplication();
  app.setTitle("Go to sheet...").setWidth(800).setHeight(600);
  var table = app.createFlexTable();
  table.setCellPadding(5).setCellSpacing(0);
  var goToSheetClick = app.createServerHandler('handleGoToSheetClick');
  var widgets = [];
  for (var i = 0; i < allsheets.length; i++) {
    var sheet_name = allsheets[i].getName();
    widgets[i] = app.createHTML(sheet_name).setId(sheet_name).addClickHandler(goToSheetClick);
    table.setWidget(i, 1, widgets[i])
  }
  var panel = app.createSimplePanel();
  panel.add(table);
  app.add(panel);
  ss.show(app);
}

function handleGoToSheetClick(e) {
  var sheet_name = e.parameter.source;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheet_name);
  sheet.activate();
  var app = UiApp.getActiveApplication();
  app.close();
  return app;
}

スクリプトを保存し、スプレッドシートを更新します。ヘルプの後に、1、2秒後に新しいメニューTasksが表示されます。このメニューには1つの項目があります:シートに移動...

タスク>シートに移動...

このメニュー項目は、現在のスプレッドシート内のすべてのシートの名前のリストを含むパネルを開きます。見た目は似ていませんが、シート名の1つをクリックすると、そのシートが前面に表示されます。


別の質問への答えとして、このスクリプトはスクロール可能なビューとボタンを含むように改善されました。


ええ、これが現時点で唯一の実行可能なソリューションだと思います。残念ながら、「Sheet5」という名前との名前を翻訳する方法を見つけていませんgid=7
サイモンイースト

私はあなたが何を意味するのか正確にはわかりません。シートには、左から順に0から番号が付けられます。したがって、「Sheet5」という名前のシートがの場合gid=7、左から8番目のシートになります。
ウィリアムジャクソン

1
つまり、手動でしかSheet5が何であるかをプログラムで見つけることはできませんgid。位置が変化すると、gid変化し、確実にリンクできなくなります。
サイモンイースト

名前でリンクする方法を見つけたら、投稿してください!
ジョーカサドンテ

1
より良いオプションが利用可能:stackoverflow.com/a/18518779/1814867
Mandar Pandit

7

私の経験からこれを行う最良の方法は、機能をボタン/画像に結び付けることです。唯一の欠点は、ボタンに割り当てられたスクリプトとともにパラメーターを渡すことができないことです。このため、各ナビゲーションに固有の関数を作成する必要がありますが、単一のスクリプトファイルで呼び出すことができます。

手順:

画像を作成し(挿入->画像)、好みに合わせてスタイルを設定します

次を使用してカスタム関数を作成します。

function showSheetByName(Name) {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName(Name);
   SpreadsheetApp.setActiveSheet(sheet);
}

次に、ボタンに固有の機能

function showSheet5() {
   showSheetByName("Sheet5");
}

最後に、この機能をボタンに割り当てます

Assign Script...
showSheet5

これで、ボタンをクリックして「Sheet5」に移動できるようになります。これは、シートの特定の領域に移動するように変更することもできます。


各ボタンに固有の機能を追加する代わりに、「現在のセル」で指定されたシートにジャンプするようにハードコードすることができます。たとえば、2行目を読み取りに変更var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); します。 「現在のセルのシートにジャンプ」というラベルを付けて、「showSheetByName」(現在はパラメーターを必要としません)を割り当てます。使用するには、シート名(Sheet5など)のセルを強調表示して、ボタンをクリックします。少し間接的ですが、ボタンをクリックしても強調表示されたセルからフォーカスが削除されないため機能します。
モッティストロム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.