スプレッドシートのシートタブをGASで一括並び替え:多数のシートもラクに整理

前回の記事では、Googleスプレッドシートのシート名を一括変更する方法をご紹介しました。

今回は、そのスクリプトの一部を使って、シートタブの順番を一括で並び替える方法をご紹介します。

スプレッドシートのシート数が少ないうちは、手作業でのシートの並び替えもそれほど手間ではありません。

ですが、シートが増えるにつれて管理が大変になり、目的のシートを探すのにも時間がかかるようになります。

今回のGoogle Apps Script(GAS)を活用することで、シート順を簡単に変更し、スムーズな管理が可能となります。

使用するGASは2つありまして、

  • スクリプト①:現在のシート名を一覧化
  • スクリプト②:シートタブの順番を一括並び替え

を組み合わせた方法となります。

目次

完成イメージ

変更前

変更後

  • スクリプト①:現在のシート名を一覧表示(A列)
  • A列のセル(シート名)を手作業でドラッグして希望の順番に並び替え
  • スクリプト②:並び替えた順序に従いシートタブの順番を変更

手順

スクリプト①は以下の記事と基本的に同じものとなります。(ヘッダー行の出力のみ修正)

スクリプト①:現在のシート名を一覧表示

このスクリプトを実行すると、「シート一覧」というシートが新たに作成され、ファイル内のシート名が一覧で表示されます。

STEP
スプレッドシートを開く

複数のシートがあるスプレッドシートファイルを開きます。

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
スクリプト①の作成

function myFunction(){

}

が最初から入っているため、消去して以下のスクリプトを貼り付けます。

スクリプト①:現在のシート名を一覧表示

function listSheetNamesWithLinks() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート一覧");

  if (!sheet) {
    sheet = ss.insertSheet("シート一覧"); // シートがない場合は新規作成
  } else {
    sheet.clear(); // 既存データをクリア
  }

  var sheets = ss.getSheets();
  var sheetId = ss.getId(); // スプレッドシートのIDを取得
  var data = [["現在のシート名"]]; // ヘッダー行

  for (var i = 0; i < sheets.length; i++) {
    var sheetName = sheets[i].getName();
    var sheetGid = sheets[i].getSheetId(); // 各シートのGIDを取得
    var hyperlinkFormula = `=HYPERLINK("https://docs.google.com/spreadsheets/d/${sheetId}/edit#gid=${sheetGid}", "${sheetName}")`;
    data.push([hyperlinkFormula]);
  }

  sheet.getRange(1, 1, data.length, 1).setValues(data);
スクリプトの説明
「シート一覧」シートを作成 or クリア
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート一覧");

  if (!sheet) {
    sheet = ss.insertSheet("シート一覧"); // シートがない場合は新規作成
  } else {
    sheet.clear(); // 既存データをクリア
  }
  • SpreadsheetApp.getActiveSpreadsheet() で現在のスプレッドシートを取得します。
  • getSheetByName("シート一覧") で 「シート一覧」シートが存在するか確認します。
  • 存在しなければ insertSheet("シート一覧") で作成、存在すれば clear() でデータをクリアします。
スプレッドシート内のすべてのシート名を取得
  var sheets = ss.getSheets();
  var sheetId = ss.getId(); // スプレッドシートのIDを取得
  var data = [["現在のシート名"]]; // ヘッダー行
  
  for (var i = 0; i < sheets.length; i++) {
    var sheetName = sheets[i].getName();
  • getSheets() でシートのリストを取得し、ループで1つずつ処理します。
各シートへのハイパーリンクを生成
    var sheetGid = sheets[i].getSheetId(); // 各シートのGIDを取得
    var hyperlinkFormula = `=HYPERLINK("https://docs.google.com/spreadsheets/d/${sheetId}/edit#gid=${sheetGid}", "${sheetName}")`;
  • スプレッドシートの ID (getId()) を取得。各シートの GID (getSheetId()) を取得し、URLの gid=... 部分に適用します。
  • =HYPERLINK("https://docs.google.com/spreadsheets/d/スプレッドシートID/edit#gid=シートGID", "シート名") という数式をA列に挿入します。
「シート一覧」にデータを出力
    data.push([hyperlinkFormula]);
  }

  sheet.getRange(1, 1, data.length, 1).setValues(data);
  • ヘッダー行(A1:「現在のシート名」)を追加します。
  • A列にハイパーリンク付きのシート名をセットします。
  • setValues(data) を使用し、データを一括で書き込みます。
STEP
スクリプト①を保存

スクリプトを書いたら、名前を付けて保存します。

(例:「シート一覧」)

STEP
スクリプト①を実行

スクリプトを実行して、ファイル内のシート一覧を作成します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
シート一覧が作成される

「シート一覧」のA列に、現在のシート名が一覧表示されます。

スクリプト②:シートタブの順番を一括並び替え

STEP
A列のシート名を手作業でドラッグして並び替え

並べ替え前

A列に表示されたシート名をドラッグして希望の順番に並び替えます。

(1行目はヘッダー行のためそのまま)

並べ替え後

STEP
GASエディタを開く
スクリプト①と同様

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
スクリプト②の作成
スクリプト①と同様に貼り付け

function myFunction(){

}

が最初から入っているため、消去して以下のスクリプトを貼り付けます。

スクリプト②:シートタブを一括並び替え

function reorderSheetsFromList() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート一覧"); // シート一覧の取得
  
  if (!sheet) {
    Logger.log("シート一覧が見つかりません");
    return;
  }

  var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getValues(); // A2以降のシート名を取得
  var sheetNames = data.map(row => row[0]).filter(name => name); // 空白のないシート名リスト

  var sheets = ss.getSheets();
  var sheetMap = {}; 

  // シート名をキーにしてシートオブジェクトをマッピング
  sheets.forEach(sheet => sheetMap[sheet.getName()] = sheet);

  for (var i = 0; i < sheetNames.length; i++) {
    var sheetName = sheetNames[i];
    if (sheetMap[sheetName]) {
      ss.setActiveSheet(sheetMap[sheetName]); // 指定のシートをアクティブに
      ss.moveActiveSheet(i + 1); // 指定の位置へ移動(1-based index)
    }
  }
}
スクリプトの説明
「シート一覧」シートの取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート一覧");
  
  if (!sheet) {
    Logger.log("シート名変更リストが見つかりません");
    return;
  }
  • getSheetByName("シート一覧") を使って 「シート一覧」シートが存在するか確認 します。
  • 存在しない場合は Logger.log("シート名変更リストが見つかりません") を出力し、処理を中断します。
A列のシート名リストを取得
  var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getValues(); // A2以降のシート名を取得
  var sheetNames = data.map(row => row[0]).filter(name => name); // 空白のないシート名リスト
  • getRange(2, 1, sheet.getLastRow() - 1, 1).getValues() を使用し、A2セル以降のシート名を取得します。
  • map(row => row[0]) で1次元配列に変換し、filter(name => name) で空欄を削除します。
現在のスプレッドシート内のすべてのシートを取得し、マッピング
  var sheets = ss.getSheets();
  var sheetMap = {}; 

  // シート名をキーにしてシートオブジェクトをマッピング
  sheets.forEach(sheet => sheetMap[sheet.getName()] = sheet);
  • getSheets() で全シートを取得し、sheetMap に シート名をキー、シートオブジェクトを値 として登録します。
「シート一覧」の順番に従ってシートタブを並び替え
  for (var i = 0; i < sheetNames.length; i++) {
    var sheetName = sheetNames[i];
    if (sheetMap[sheetName]) {
      ss.setActiveSheet(sheetMap[sheetName]); // 指定のシートをアクティブに
      ss.moveActiveSheet(i + 1); // 指定の位置へ移動(1-based index)
    }
  }
  • 取得した sheetNames をループし、該当するシートを setActiveSheet(sheetMap[sheetName]) でアクティブ化します。
  • moveActiveSheet(i + 1) で、リストの順番どおりにシートタブの位置を変更します。
STEP
スクリプト②を保存
スクリプト①と同様

スクリプトを書いたら、名前を付けて保存します。

(例:「シート並び替え」)

STEP
スクリプト②を実行
スクリプト①と同様

スクリプトを実行して、シートタブを並び替えます。

STEP
シートタブが並び替えられる

変更前

変更後

A列の順番に従って、スプレッドシートのシートタブが並び替えられます。

まとめ

今回の方法を使えば、スプレッドシートのシートの順番をまとめて変更できるようになります。

特に、シート数が多い場合や並び替えを何回も行う時に役立ちます。

シート管理を効率化したい時にご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次