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

前回の記事では、Googleスプレッドシートのシート名を一括変更する方法をご紹介しました。
今回は、そのスクリプトの一部を使って、シートタブの順番を一括で並び替える方法をご紹介します。
スプレッドシートのシート数が少ないうちは、手作業でのシートの並び替えもそれほど手間ではありません。
ですが、シートが増えるにつれて管理が大変になり、目的のシートを探すのにも時間がかかるようになります。
今回のGoogle Apps Script(GAS)を活用することで、シート順を簡単に変更し、スムーズな管理が可能となります。
使用するGASは2つありまして、
- スクリプト①:現在のシート名を一覧化
- スクリプト②:シートタブの順番を一括並び替え
を組み合わせた方法となります。

完成イメージ
変更前


変更後


- スクリプト①:現在のシート名を一覧表示(A列)
- A列のセル(シート名)を手作業でドラッグして希望の順番に並び替え
- スクリプト②:並び替えた順序に従いシートタブの順番を変更
手順
スクリプト①は以下の記事と基本的に同じものとなります。(ヘッダー行の出力のみ修正)
スクリプト①:現在のシート名を一覧表示
このスクリプトを実行すると、「シート一覧」というシートが新たに作成され、ファイル内のシート名が一覧で表示されます。


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

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

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); // A列に一括出力
}
スクリプトの説明
- 「シート一覧」シートを作成 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列に挿入します。
- スプレッドシートの ID (
- 「シート一覧」にデータを出力
-
data.push([hyperlinkFormula]); } sheet.getRange(1, 1, data.length, 1).setValues(data);
- ヘッダー行(A1:「現在のシート名」)を追加します。
- A列にハイパーリンク付きのシート名をセットします。
setValues(data)
を使用し、データを一括で書き込みます。

スクリプトを書いたら、名前を付けて保存します。
(例:「シート一覧」)

「シート一覧」のA列に、現在のシート名が一覧表示されます。
スクリプト②:シートタブの順番を一括並び替え
並べ替え前

A列に表示されたシート名をドラッグして希望の順番に並び替えます。
(1行目はヘッダー行のためそのまま)
並べ替え後

スクリプト①と同様

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
スクリプト②:シートタブを一括並び替え
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)
で、リストの順番どおりにシートタブの位置を変更します。
- 取得した
スクリプト①と同様

スクリプトを書いたら、名前を付けて保存します。
(例:「シート並び替え」)
スクリプト①と同様

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

変更後


A列の順番に従って、スプレッドシートのシートタブが並び替えられます。
まとめ
今回の方法を使えば、スプレッドシートのシートの順番をまとめて変更できるようになります。
特に、シート数が多い場合や並び替えを何回も行う時に役立ちます。
シート管理を効率化したい時にご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント
コメント一覧 (2件)
150個のシートを作成して,それぞれ名称を付けてシート毎に個人個人の共有に分けて終わって……並べ替えようとしたところ,並べ替えることができない!涙
1シート毎に動かすしかないのか,と途方に暮れてググったら,御社のページにたどり着きました。
非常にわかりやすく,成功しました。感動して涙が出そうになりました。
本当にありがとうございました! 神です!
コードとかまったくわからない人間からちょっとだけ,
ステップ3のスクリプト1がちょっとバグっていたようです。御社の前のページ「GASでGoogleスプレッドシートのシート名を一覧表示&一括変更」のスクリプトで上手くシート一覧が作成できました。その後,シート一覧上で1から150までを並べ替えて,このページのスクリプト2で実行したところ…一発で上手くいきました。感動です!ありがとうございました。今後もこのようなGASの開発をよろしくお願いします。
MS様、嬉しいコメントをありがとうございます!
記事がお役に立てたとのこと、本当にうれしく思います。
ご指摘いただいたスクリプト1については、後半部分が欠けており失礼致しました。早速修正させていただきます。
今後も、少しでもお役に立てるような記事づくりを続けてまいります。
またお役に立てれば幸いです。