Amazonで商品を見るセール会場へ

Googleスプレッドシート│自動で日付入り!複製シートを作成する方法

masterシートから月ごとのシートを複製します。

年月はスプレッドシートのタイムゾーンで決め、同じ年月名のシートがあれば上書きせずに終了します。

練習コード・入力JSON・文字変換ブックをダウンロード(ZIP)できます。

記事ごとに別のApps Scriptプロジェクトを使い、新規の練習データを対象にしてください。

最終確認は2026年10月2日です。

GASの51項目はローカルの模擬検証、curlの3項目はローカルHTTP環境、数式の8項目はArtifact Toolでの検証です。

Googleへの認可・実シートの操作・カレンダーの列挙・配備後のHTTP通信・Google Sheetsでの数式計算は未検証です。

目次

入力例:masterと練習ブックの設定

新規ブックにmasterというシートを作り、A1に「項目」、B1に「値」、A2に「練習」、B2に数値10を入れます。

必要な書式もmasterに指定します。

ブックの「ファイル」→「設定」でタイムゾーンを確認し、日本時間で使うなら東京にそろえます。

設定内容
SPREADSHEET_ID練習ブックのID
複製元のシート名master
デモの日時2026年10月1日0時30分、日本時間
日本時間の生成名202610

手動実行と同じ年月での再実行

「拡張機能」→「Apps Script」を開き、プロジェクトの設定でSPREADSHEET_IDをスクリプトプロパティへ入れます。

次のコードを保存し、最初はdemoMonthCopyを実行します。

現在日時で複製する場合はAutoSheetCopyを実行します。

初回は対象ブックへのアクセス権限を確認して認可します。

function monthSheetName_(date, zone) {
  if (!(date instanceof Date) || !Number.isFinite(date.getTime())) throw new Error('有効な日時を指定してください');
  return Utilities.formatDate(date, zone, 'yyyyMM');
}
function AutoSheetCopy() { return copyMonthAt_(new Date()); }
function demoMonthCopy() { return copyMonthAt_(new Date('2026-10-01T00:30:00+09:00')); }
function copyMonthAt_(date) {
  const id = PropertiesService.getScriptProperties().getProperty('SPREADSHEET_ID');
  if (!id) throw new Error('SPREADSHEET_IDを設定してください');
  const ss = SpreadsheetApp.openById(id);
  const name = monthSheetName_(date, ss.getSpreadsheetTimeZone());
  const lock = LockService.getScriptLock();
  if (!lock.tryLock(5000)) throw new Error('別の実行中です。完了後に同じ年月で確認してください');
  try {
    const master = ss.getSheetByName('master');
    if (!master) throw new Error('masterシートがありません');
    if (ss.getSheetByName(name)) return {status: 'exists', sheetName: name};
    ss.insertSheet(name, 0, {template: master});
    SpreadsheetApp.flush();
    const result = {status: 'created', sheetName: name};
    console.log(JSON.stringify(result));
    return result;
  } finally { lock.releaseLock(); }
}

確認結果と切り分け

条件結果
日本時間の初回デモ202610が追加され、status:created
同じデモを再実行status:exists。新しいシートを増やさない
masterがないエラーで停止し、複製しない
既存の202610に入力済みデータがある上書きしない
masterのA2とB2複製後も元は「練習」と10のまま
月が想定と違うスプレッドシートのタイムゾーンと実行日時を確認する
別の実行が進行中ロック取得に失敗した実行は停止する

模擬検証では、同じデモ日時をロサンゼルスのタイムゾーンで判定すると202609になりました。

タイムゾーンはシート名の月を決める条件です。

複製後の値・書式・数式参照は実際のGoogleシートで確認する必要があります。

定期実行する場合と停止方法

このコードはトリガーを自動で作成しません。

手動の複製結果を確認した後に定期実行へ移す場合は、エディタの「トリガー」からAutoSheetCopyを時間主導で指定します。

実行時間帯はプロジェクト側のタイムゾーンも確認します。

停止時には該当トリガーを削除または停止し、生成済みのシートを確認します。

不要な複製を戻す場合も、入力後のデータを失わないよう元ブックのコピーを残してから判断します。

既存の年月シートを置き換える処理は含めていません。

公式資料

テンプレートを使うinsertSheet、ロックと反映の確定を参照してください。

関連記事・旧実装の参考資料

旧GitHubコードや外部の参考例は、現在の記事のZIPと異なる場合があります。

今回の練習は本文のセル番地・プロパティ・ZIPをそろえて実行してください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

スプレッドシート・GASのおすすめ書籍

作業環境の作り方

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