2026年7月20日月曜日

GASでシートを操作する方法|追加・削除・コピーを安全に実装する

「セル」ではなく「シート」を操作するという段階へ

GAS011ではセル操作、GAS012ではRange一括操作を学びました。
これらを理解した次の段階が、シートそのものを操作する処理です。

シート操作は非常に便利ですが、 一方で「削除」「上書き」「コピー」といった取り返しのつかない操作も含みます。

この記事では、GASでシートを操作する基本として、 取得・追加・削除・コピーを安全に実装する方法を解説します。
GAS010(例外処理)・GAS009(設定管理)を前提にした、 実務で事故らない設計がテーマです。

目次

シート操作の全体像

GASにおけるシート操作は、次の流れで行います。

  • Spreadsheet(ファイル)を取得
  • Sheet(シート)を取得
  • シートに対して操作を行う

ここで重要なのは、 「どのシートを操作しているか」を常に意識することです。
シート名の指定ミスは、そのまま事故につながります。

シートを取得する方法

最も基本となるのが、シート名を指定して取得する方法です。


const sheet = spreadsheet.getSheetByName('Sheet1');

このメソッドは、 指定した名前のシートが存在しない場合、null を返します。

そのため、実務では必ず存在チェックを行います。


if (!sheet) {
  throw new Error('指定したシートが存在しません');
}

「nullチェックをしない」ことが、 シート操作事故の最大要因です。

新しいシートを追加する

新しいシートを追加するには、insertSheet を使います。


const newSheet = spreadsheet.insertSheet('新規シート');

同名のシートが存在する場合はエラーになります。
そのため、追加前に存在チェックを行うのが安全です。


const sheetName = '新規シート';
if (spreadsheet.getSheetByName(sheetName)) {
  throw new Error('既にシートが存在します:' + sheetName);
}
spreadsheet.insertSheet(sheetName);

実務では「日付付き」「連番付き」でシートを作るケースも多く、 命名ルールを事前に決めておくと管理が楽になります。

シートを削除する(要注意)

シート削除は、GASの中でも最も危険な操作の1つです。
一度削除すると、元に戻せません。

削除には deleteSheet を使います。


spreadsheet.deleteSheet(sheet);

実務では、次のようなガードを必ず入れます。

  • 削除対象のシート名をログに出す
  • 「削除してよい条件」を明確にする
  • try-catchで必ず囲む

「とりあえず削除」は絶対に避けましょう。

シートをコピーする

テンプレートを使った処理では、 シートコピーが非常に役立ちます。


const template = spreadsheet.getSheetByName('テンプレ');
const copiedSheet = template.copyTo(spreadsheet);
copiedSheet.setName('コピー後シート');

この方法で、 書式・数式を含めたシートをそのまま複製できます。

コピー後は、必ずシート名を変更してください。
変更しないと同名シートが増えて混乱します。

PropertiesService+try-catchによる安全設計

ここまでの操作を、安全にまとめた実務例を示します。


function createSheetFromTemplateSafe() {
  try {
    const props = PropertiesService.getScriptProperties();
    const sheetName = props.getProperty('NEW_SHEET_NAME');

    if (!sheetName) {
      throw new Error('NEW_SHEET_NAME が未設定です');
    }

    const ss = SpreadsheetApp.getActiveSpreadsheet();
    if (ss.getSheetByName(sheetName)) {
      throw new Error('既にシートが存在します:' + sheetName);
    }

    const template = ss.getSheetByName('テンプレ');
    if (!template) {
      throw new Error('テンプレートシートが存在しません');
    }

    const newSheet = template.copyTo(ss);
    newSheet.setName(sheetName);

    Logger.log('シート作成完了:' + sheetName);
  } catch (e) {
    Logger.log('エラー発生(createSheetFromTemplateSafe):' + e.message);
  }
}

この構成では、 設定・存在チェック・例外処理が明確に分離されています。

実務でよくある事故と対策

  • 想定外のシートを削除 → シート名チェック必須
  • 同名シート大量発生 → 命名ルールを固定
  • テンプレ消失 → テンプレ存在チェック

シート操作は便利ですが、 「壊れたときの影響が大きい」領域です。
必ず安全設計を前提に組みましょう。

まとめ

この記事では、GASでシートを操作する方法として、 取得・追加・削除・コピーの基本を解説しました。

シート操作を正しく扱えるようになると、 帳票生成・月次処理・レポート自動化といった 実務自動化の幅が一気に広がります。

次回は、セルの「見た目」を制御する書式操作に進みます。

GAS シート操作 追加 削除 コピー 解説イメージ

0 件のコメント:

コメントを投稿