GASで複数シートを扱うと、「名前でシートを取得する」「シートを追加・削除する」「テンプレシートを複製する」といった操作が必要になります。これらは getSheetByName / insertSheet / deleteSheet / copyTo で行います。この記事ではコピペで動くコード例と、nullまわりのつまずきを解説します。
この記事のポイント
- 名前で取得は
getSheetByName("名前")(見つからないとnull)- 追加は
insertSheet("名前")、削除はdeleteSheet(シートオブジェクト)- 複製は
copyTo(ss)→ 名前はsetName()で変更- 削除は「名前」ではなく「シートオブジェクト」を渡す点に注意
シートを取得する:getSheetByName と getSheets
名前で1枚取得するなら getSheetByName、全シートを回すなら getSheets です。まず操作対象のスプレッドシート(ss)を取得してから使います。
function getSheets() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
// 名前で1枚取得
const sheet = ss.getSheetByName("売上");
if (!sheet) {
Logger.log("『売上』シートが見つかりません");
return;
}
Logger.log(sheet.getName());
}
注意:getSheetByName は名前が一致するシートが無いと null を返します。null のまま操作すると「Cannot read properties of null」エラーになるので、使う前に if (!sheet) でチェックしましょう。
全シートをまとめて処理する
function listSheets() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
ss.getSheets().forEach(function(sheet) {
Logger.log(sheet.getName()); // シート名を順に出力
});
}
シートを追加する:insertSheet
function addSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.insertSheet("新規シート"); // 末尾に追加
// ss.insertSheet("先頭シート", 0); // 位置を指定して追加(0=先頭)
Logger.log(sheet.getName() + " を追加しました");
}
注意:シート名は重複できません。同じ名前のシートが既にあると insertSheet はエラーになります。
シートを削除する:deleteSheet
削除は「名前」ではなくシートオブジェクトを渡します。getSheetByName で取得してから渡すのが定番です。
function removeSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("不要シート");
if (sheet) {
ss.deleteSheet(sheet); // シートオブジェクトを渡す
}
}
注意:スプレッドシートは最低1枚必要です。最後の1枚は削除できず、削除しようとするとエラーになります。
シートを複製する:copyTo
「テンプレートを複製して今月のシートを作る」ような処理は copyTo で行います。複製直後の名前は「Copy of …」になるので、setName で変更します。
function copySheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const src = ss.getSheetByName("テンプレ");
if (!src) return;
const copied = src.copyTo(ss); // 同じファイル内に複製
copied.setName("2026年4月"); // 名前を変更
}
中身だけ消す:clear と clearContents
シートごと消すのではなく中身だけ消したいときは、clear(書式も含めて全消し)/ clearContents(値だけ消す)を使います。
function clearSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("作業用");
if (!sheet) return;
sheet.clearContents(); // 値だけ消す(書式は残す)
// sheet.clear(); // 書式も含めて全消し
}
よくあるつまずきと直し方
「Cannot read properties of null」エラー → getSheetByName がシートを見つけられず null です。名前のスペルを確認し、if (!sheet) でガードを。
deleteSheetでエラー → 名前の文字列ではなく、シートオブジェクトを渡しているか確認。最後の1枚は削除不可。
insertSheetでエラー → 同名シートが既に存在しています。名前を変えるか、既存を取得して使う。
複製名が「Copy of …」のまま → copyTo の戻り値に setName() で名前を付ける。
この記事のポイント(まとめ)
| やりたいこと | 使うもの |
|---|---|
| 名前で取得 | getSheetByName("名前")(無いとnull) |
| 全シート取得 | getSheets() |
| 追加 | insertSheet("名前"[, 位置]) |
| 削除 | deleteSheet(シートオブジェクト) |
| 複製 | copyTo(ss) + setName() |
| 中身クリア | clearContents() / clear() |
次のステップ
- GASのセル読み書き|getRange/getValue/setValueの基本
- GASで行を追加・削除する方法(appendRow/deleteRow)
- 【完全ガイド】GASでスプレッドシートを自動化する方法
あわせて読みたい
シート名に年月を入れて月次シートを自動生成する、という使い方をするなら、日付の取得と書式変換も押さえておきたい。GASでの日付の扱いは次の記事にまとめている。
コメント