GASでGoogleスプレッドシートのシート名を一覧表示&一括変更

Googleスプレッドシートでシート名を変更する作業を、手作業で1つずつ行うと手間がかかりませんか?
特にシート数が多い場合は、時間がかかるだけでなく、入力ミスも発生しやすくなります。
そこで、Google Apps Script(GAS)を活用して、シート名を一覧化して管理し、一括変更することで手間をなくせます。
この記事では、
- スクリプト①:現在のシート名を一覧化
- スクリプト②:新しいシート名に一括変更
の2つを組み合わせて、シート名を一括変更する方法をご紹介します。

完成イメージ

変更前

変更後

- スクリプト①:現在のシート名を一覧表示(A列)
- A列をハイパーリンク付きにすることで、シートを確認可能
- スクリプト②:新しいシート名に一括変更(B列)
- B列が空欄ならシート名は変更されず、ミスを防げる
手順
スクリプト①:現在のシート名を一覧表示
このスクリプトを実行すると、「シート一覧」というシートが新たに作成され、ファイル内のシート名が一覧で表示されます。
ハイパーリンク付きでクリックすると各シートに移動もできるため、シートの内容確認が可能です。


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

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, ""]); // A列にハイパーリンク、B列は新しいシート名を入力するため空欄
}
// A列にHYPERLINK関数を適用、B列に新しいシート名を入力可能にする
sheet.getRange(1, 1, data.length, 2).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列に挿入します。
- スプレッドシートの ID (
- 「シート一覧」にデータを出力
-
data.push([hyperlinkFormula, ""]); // A列にハイパーリンク、B列は新しいシート名を入力するため空欄 } // A列にHYPERLINK関数を適用、B列に新しいシート名を入力可能にする sheet.getRange(1, 1, data.length, 2).setValues(data); }
- ヘッダー行(A1:「現在のシート名」, B1:「新しいシート名」)を追加します。
- A列にハイパーリンク付きのシート名、B列に新しいシート名を入力するための空欄をセットします。
setValues(data)
を使用し、データを一括で書き込みます。

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

「シート一覧」のA列に、現在のシート名が一覧表示されます。
スクリプト②:新しいシート名に一括変更
次に、B列に入力した新しいシート名に変更するスクリプトを実行します。


B列に新しいシート名を入力します。
(入力がない空白セルは変更なしで処理されます。)
スクリプト①と同様

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
スクリプト②:新しいシート名に一括変更
function renameSheetsFromList() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("シート一覧");
if (!sheet) {
Logger.log("シート名変更リストが見つかりません");
return;
}
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) { // 1行目はヘッダーなのでスキップ
var oldName = data[i][0]; // A列(現在のシート名)
var newName = data[i][1]; // B列(新しいシート名)
if (oldName && newName && oldName !== newName) {
var targetSheet = ss.getSheetByName(oldName);
if (targetSheet) {
try {
targetSheet.setName(newName);
} catch (e) {
Logger.log("エラー: " + oldName + " を " + newName + " に変更できませんでした。" + e.message);
}
}
}
}
}
スクリプトの説明
- 「シート一覧」シートの取得
-
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("シート一覧"); if (!sheet) { Logger.log("シート名変更リストが見つかりません"); return; }
getSheetByName("シート一覧")
を使って 「シート一覧」シートが存在するか確認 します。- 存在しない場合は
Logger.log("シート名変更リストが見つかりません")
を出力し、処理を中断します。
- 「シート一覧」シートのデータを取得
-
var data = sheet.getDataRange().getValues(); for (var i = 1; i < data.length; i++) { // 1行目はヘッダーなのでスキップ
getDataRange().getValues()
を使い、すべてのデータ(A列・B列)を取得 します。- 1行目(ヘッダー行)をスキップし、2行目からループ処理します。
- シート名の変更処理
-
var oldName = data[i][0]; // A列(現在のシート名) var newName = data[i][1]; // B列(新しいシート名) if (oldName && newName && oldName !== newName) { var targetSheet = ss.getSheetByName(oldName);
- A列の現在のシート名 (
oldName
) と B列の新しいシート名 (newName
) を取得します。 oldName
とnewName
の両方が存在し、異なる名前の場合のみ シート名を変更します。getSheetByName(oldName)
で対象のシートを取得し、存在すればsetName(newName)
で変更。
- A列の現在のシート名 (
- エラーハンドリング
-
try { targetSheet.setName(newName); } catch (e) { Logger.log("エラー: " + oldName + " を " + newName + " に変更できませんでした。" + e.message); }
try-catch
を使用し、シート名変更時にエラーが発生した場合はLogger.log()
でエラーメッセージを記録します。- 変更不可のシート名(すでに存在する名前や無効な名前) がある場合は、スキップして処理を続行します。
スクリプト①と同様

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

スクリプトを実行して、シート名を一括変更します。

変更前

変更後

B列の入力内容に基づいて シート名が一括変更されます。
なお、B列が空欄のシートは変更されません。
まとめ
今回のスクリプト2つを使うことで、Googleスプレッドシートのシート名を効率的に管理し、一括変更できるようになります。
手動での変更作業と比べて時間を大幅に短縮できるほか、事前に内容を確認しながら変更作業を行えるため、入力ミスのリスクも軽減できます。
シート数が多く、手作業の変更では大変な時にご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント