2022/07/22に更新

【GASで時短】全シートの目次を作る

スプレッドシート小技

スプレッドシートに存在する全シートの目次(リンク付き)を生成するGoogle Apps Scriptです。シートが増えすぎて移動が大変なときにどうぞ。

こんな悩みを解決します


  • シートの移動がめんどくさすぎるので、目次を作ってすぐに飛べるようにしたい!

用意するもの


特にありません、今お使いのスプレッドシートに組み込むことが出来ます。

このスクリプトで出来ること


  • スプレッドシートのすべてのシートへのリンクを生成することが出来ます。
  • リンクはアクティブなセルを起点に書き込まれます。

使い方


1.スクリプトの実行

サンプルとして6個のシートを作りました。
そのうち1つは非表示のシートとしています。

上のメニューにある「スクリプト実行」から「シートの目次を生成する」を実行します。

2.結果の確認

実行が完了すると、このように目次が生成されます。
非表示のシートのリンクは生成されないようになっています。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00124/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('シートの目次を生成する', 'create_sheet_index');

  // メニューを画面に追加する
  menu.addToUi();
}


function create_sheet_index() {

  // 開いているスプレッドシートオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // すべてのシートオブジェクトを取得
  const sheets = ss.getSheets();

  // リンク生成に使うため、スプレッドシートのURLを取得
  const url = ss.getUrl();

  // セルに書き込む値を格納する変数
  const result = [];

  // シートの数だけループ
  for (let i = 0; i < sheets.length; i++) {

    // 非表示のシートの場合は目次を作らない。スキップする。
    if (sheets[i].isSheetHidden() == true) {
      continue;
    }

    // シートの名前を取得。リンクの表示名に使用する。
    let sheet_name = sheets[i].getName();

    // シートのIDを取得。リンク生成に使用する。
    let sheet_id = sheets[i].getSheetId();

    // スプレッドシートのURLとシートのIDからURLを組み立てる
    let link = url + '#gid=' + sheet_id;

    // 結果用の変数に格納する。数式(HYPERLINK)をセット。
    result.push(['=HYPERLINK("' + link + '","' + sheet_name + '" )']);

  }


  // 開いているシートオブジェクトを取得
  const active_sheet = ss.getActiveSheet();

  // 選択中のセル範囲を取得
  const active_range = active_sheet.getActiveRange();

  // 値の書き込み範囲のオブジェクトを取得する。アクティブセルを起点に、シート数分の行数を指定。
  const range = active_sheet.getRange(active_range.getRow(), active_range.getColumn(), result.length, 1);

  // 数式を書き込む。
  range.setFormulas(result);

}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp