【GAS】スプレッドシートのハイパーリンクで目次と全シートリンクを超簡単作成

快速ワーク
スポンサーリンク

Googleスプレッドシートでたくさんシートを作成した時、いちいちシート移動ってめんどくさくないですか?

Excelと比べるとパフォーマンスは若干悪いので、操作もできる限り効率化すべきですね。

また、シートの数が多いと目的のシートに次々と移動したい時、大抵一番左側にある目次シートに戻ってくるのって結構めんどくさいですよね。

そんな時は、各シートに目次シートへのリンクを作っておけば、相互にマウスクリックでジャンプするだけなのでメチャメチャ作業が楽になります。

そこでGASにて目次シートを超簡単に作成するマクロを実装してみましたので、目的に合致した場合はぜひ使ってみてください。

Excelに比べると作成処理は結構遅いですが、シート管理のしやすさ、シート参照速度は爆上げされると思います。

百聞は一見に如かず、一目瞭然、一発でイメージが湧き、使い方がわかるようなGIFアニメ付きです。


スポンサーリンク

目次と各リンクをシート内で相互にハイパーリンクでジャンプしたい

たくさんのシートを作成した時、目次があると大変便利です。

一瞬で目次を作成して各シートにジャンプでき、そのジャンプ先のシートからも目次に一瞬で戻ってきたい場面って結構ありませんか?

そんな方達向けにまぁまぁ汎用的なマクロを作ってみました。

Googleスプレッドシートの目次リンク作成GASマクロの操作イメージサンプル例

マクロを登録して、下記の画像操作と同じようにやってみてください。

ページ番号+シート名

シート数が一発でわかるシートの順番に並べたページ番号付きです。シートの順番を変えて再度実行すれば番号も再整理されます。

目次リンクの折り返し制御

快適に目次からサクサクと各シートにジャンプするためには、目次シートは一発で全シートが見える状態がベストですよね。

単純に1列のみのリスト出力だと、100シートを超える場合はいちいちスクロールする手間が発生してしまいます。

柔軟に複数列で目次リストを作成できるように折り返し制御を盛り込みました。

用途に合わせて定義を変更し、微調整してください。

Excelではマクロを使うとCtrl+Zで元に戻らないですが、GASマクロは元に戻るようです。便利ですね!!

GASマクロでは任意のショートカットキー 「Ctrl+Alt+Shift+(0~9の任意キー)」(10個まで)を割り当てることが可能です。使い方次第ではよりスピーディに操作可能になります。


目次リンク作成GASマクロの主な仕様

細かい処理はコメントで補足してるので、ザックリとした仕様を箇条書きで記載します。

  • ブック内の全シートにリンクするリストを表示した目次シートを作成
  • ブック内の各シートに目次シートへのリンクを作成
  • 実行判断の確認メッセージ制御(フラグon/offあり)
  • 目次リストが1ページ内に収まるように折り返し制御
  • 目次シートへのリンクはセルだと既存の値を上書きしてしまうため、テキストボックスで作成 ※既に存在していた場合は削除



目次リンク作成GASマクロのソースコード

目次ジャンプ効率を爆上げしたい方は、下記のソースコードを以下↓↓↓のリンクの内容に従ってコピーしてご使用ください。

【GAS】Googleスプレッドシートでマクロの使い方入門【動画付】
Googleの「Google Apps Script」通称GAS。GoogleマップやGメールなど、いろんなGoogle関連のサービスと自由に連携できたり、独自のWebアプリを開発することもできる、いろんな可能性を秘めたワクワクの...

目的に合っていない場合は適当にカスタマイズしてみてください。GASマクロの勉強にも少しは役立つと思います。

/* 目次シート作成 */
function mokujiSheetMake() {
  
  // 確認メッセージフラグ
  var confirmMsgFlg = 0; // 0:確認メッセージを表示しない、1:確認メッセージを表示する
  
  // 処理区分
  var shoriKbn = 1
      // 0:目次シートのみ作成(各シート目次リンクがある場合は削除)
      // 1:目次シート作成+各シート目次リンク作成
  /////目次シート定数/////
  var mokujiSheetNm = "目次";                    // 目次シート名
  var mokujiLstWrapRow = 10;                     // 目次リスト折り返し行数
  var mokujiLstWrapCol = 3;                      // 目次リスト折り返し列数
  var mokujiLstRowMargin = 3; // 上余白          // 目次リスト行マージン
  var mokujiLstColMargin = 1; // 左余白          // 目次リスト列マージン
  
  /////各シート定数/////
  var everyShtMokujiLnkNm = mokujiSheetNm+"へ"; // 各シート目次リンク名
  
  // 目次シートと各シート左上に目次リンク作成処理
  mokujiSheetmakeShori(confirmMsgFlg,
                       shoriKbn,
                       mokujiSheetNm,
                       mokujiLstWrapRow,
                       mokujiLstWrapCol,
                       mokujiLstRowMargin,
                       mokujiLstColMargin,
                       everyShtMokujiLnkNm);
                       
}
////////////////////////////////////////////////////////////////////////////////
/* 目次シートと各シート左上に目次リンク作成処理 */
function mokujiSheetmakeShori(confirmMsgFlg,
                              shoriKbn,
                              mokujiSheetNm,
                              mokujiLstWrapRow,
                              mokujiLstWrapCol,
                              mokujiLstRowMargin,
                              mokujiLstColMargin,
                              everyShtMokujiLnkNm) {
                              
  //////////概要//////////
  //スプレッドシート内の全シートにリンクするリストを表示した目次シートを作成
  //スプレッドシート内の各シートに目次シートへのリンクを作成
  
  var spSht = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = spSht.getSheets();
  
  //////////定義//////////
  /////目次シートワーク変数/////
  var rowSeq,colSeq,mokujiLstRow,mokujiLstRowMargin,mokujiLstCol,mokujiLstColMargin;
  
  //////////確認処理//////////
  if (confirmMsgFlg == 1) {
    var msg = "";
    if (shoriKbn == 0) {
      msg = msg+"<目次シートのみ作成>\\n";
    } else if (shoriKbn = 1) {
      msg = msg+"<目次シート作成+各シート目次リンク作成>\\n";
    }
    msg = msg+"\\n";
    
    msg = msg
     +"・目次シートに各シートへリンクする目次リストを作成します。\\n"
     +"・目次シートが存在しない場合は新規シートを作成します。\\n"
     +"・既に目次シートが存在する場合は一旦クリア後に再作成します。\\n"
     +"・シート数「"+mokujiLstWrapRow+"」行で次列に折り返します。\\n";
     
    if (shoriKbn == 0) {
      msg = msg
       +"・各シートに目次シートへのリンク(テキストボックス)「"
         +everyShtMokujiLnkNm+"」が存在する場合は全て削除します。\\n"
       +" ※各シートの目次リンクは作成しません。\\n"
       +" (全シートに誤って作成してしまったリンクを削除する場合に有効)\\n";
    } else if (shoriKbn == 1) {
      msg = msg
       +"・各シートに目次シートへのリンク(A列新規追加後にA1セル)「"
         +everyShtMokujiLnkNm+"」を作成します。\\n"
       +" ※既に存在する場合は一旦削除後に再作成します。\\n"
       +" (目次シートと各シートを相互にリンクしたい場合に有効)\\n";
    }
    
    // 実行確認
    if (msg != "") {
      var msgRtn = Browser.msgBox(msg+"\\n実行してよろしいですか?",Browser.Buttons.OK_CANCEL);
      if (msgRtn == 'cancel') {return;}
    }
    
  }
  
  //////////チェック//////////
  if (mokujiLstWrapCol < 2) {
    Browser.msgBox("番号とリンクで最低2列必要なので、折り返し列数は「2」以上を設定してください。\\n"
      +"処理を終了します。");
    return;
  }
  
  /////目次シート作成/////
  //シートが存在しない場合は「目次」シートを先頭に新規作成
  var mokujiExistsFlg = 0;
  for (var i=0;i 2) { //マージン不足の場合は設定しない
    mokujiSheet.getRange(mokujiLstRowMargin-1,mokujiLstColMargin+1).setValue(mokujiSheetNm)
    .setFontWeight('bold');
  }
  
  mokujiSheet.getRange('A1').activate();
  
}

目次リンク作成マクロのGASとExcelVBAとの違い

Excel版はコチラ。

【ExcelVBA】目次シートと全シート目次リンクを超簡単作成
Excelを使っている時、一つのブックにたくさんのシートを作成する場面って結構ありませんか?そんな時、目次シートがあったら便利ですよね。でも、シートの数が多いと目的のシートに次々と移動したい時、いちいち大抵一番左側にある目...

コーディングの内容は全然違いますが、仕様、ロジックはほとんど同じです。

ExcelからGoogleスプレッドシートに徐々にでも移行を考えている方は見比べて参考にしてみてください。

Excelでは図形オブジェクトに目次へのリンクを貼ってますが、GASでは図形オブジェクトの貼り方がまだ不明なので、A列を新規に追加してA1セルにリンクを貼ってます。


最後に

Googleスプレッドシートの使い方は人それぞれ、いろんなやり方があると思いますが、一例としてご紹介させていただきました。

GASマクロはExcelVBAとはかなり違いますが、JavaScriptは覚えておいて損はないプログラムだと思うのでショートカットキーなどと組み合わせてぜひ活用してみてください。

Googleスプレッドシート全ショートカットキー一覧はこちら↓↓↓

Googleスプレッドシートの使い方や機能がわかるショートカットキー全まとめ一覧【初心者こそ必見】
表計算ソフトとして、まだまだExcelのシェア率は高いですが、GoogleスプレッドシートにはExcelにはない超強力な関数があったり、Excelとは違って常に最新版を無料で使用できます。なにより、インターネットを使ったオンライン...

ちょっと工夫すれば、ちょっとした操作に1分かかっていた作業を10秒でこなすことができるようになる可能性があります。

それだけでも、積み上げれば相当の工数を削減できるはずなので、ぜひ自分に合ったやり方を模索していきましょう。


コメント

//▼2023/04/08追加 //https://lovagelab.com/posts/3406/ //▲2023/04/08追加