MENU

【GAS】シートの取得・追加・削除・コピー|getSheetByNameの使い方(コピペOK)

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での日付の扱いは次の記事にまとめている。

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

この記事を書いた人

コメント

コメントする

目次