Google Apps Script(GAS)を使って、
- 日付をもとにファイル名を付けて
- テンプレートのスプレッドシートをコピー
- チェックボックスの状態を確認
- コピーしたファイル内でシートを複製・リネーム
までを一括で自動処理するスクリプトを作成しました。
テンプレートの定期出力や業務報告用ファイルの管理を効率化できます。
テンプレートを日付別に複製&チェックボックス処理も自動化する
各処理の流れを解説したあと、全体のコードを紹介します。
Phase1:日付の取得と整形
var myDate = LogFileSheet.getRange("A3").getValue();
var input = new Date(myDate);
var date = Utilities.formatDate(input, 'JST', 'yyMMdd');- スプレッドシートの
A3セルにある日付(例:2019/08/26)を取得 yyMMdd形式に変換 →190826の形式に整形
Googleスプレッドシートのほかの操作方法は、まとめ記事から確認できます。

Phase2:テンプレートの複製とID書き込み
var CopiedFile = templateFile.makeCopy(OutputFileName, OutputFolder);
var CopiedFileId = CopiedFile.getId();
LogFileSheet.getRange("A1").setValue(CopiedFileId);- 指定したテンプレートファイルを複製
- ファイル名を「テンプレート」から「テンプレート+日付」へ変更
- 複製したファイルのIDを記録用シートの
A1セルに書き込み
Phase3:チェックボックスの確認
var Values = CopiedFileSheet.getRange(1, 1, 1, 8).getValues();
for (var i = 0; i < Values[0].length; i++) {
if (Values[0][i] === true) {
Logger.log("チェックがついています");
LogFileSheet.getRange("A2").setValue("チェックがついています");
LogFileSheet.getRange("A3").setValue("");
}
}- 複製したシートの1行目・1〜8列目を確認
- もし
true(チェックあり)のセルがあればログ出力し、A2セルに結果を記録
Phase4:シートのコピーと並び順調整
var DateSheet = CopiedFileSheet.copyTo(CopiedFile);
var ActiveSheet = DateSheet.setName(date);
CopiedFile.setActiveSheet(ActiveSheet);
CopiedFile.moveActiveSheet(1);- 複製先ファイル内で「コピー元」シートを複製
- 日付(例:190826)をシート名に設定
- シートを先頭(一番左)に移動して整理
コードのまとめ
全体のスクリプトコードです。
function myFunction() {
//■Phase1
//記録用のスプレッドシート
var LogFile = SpreadsheetApp.openById('記録用のシートID');
//シートの選択
var LogFileSheet = LogFile.getSheetByName('シート1');
var myDate = LogFileSheet.getRange("A3").getValue();//2019/08/26と書いてあるます。
var input = new Date(myDate);
var date = Utilities.formatDate(input, 'JST', 'yyMMdd')
//■Phase2
// テンプレートファイル
var templateFile = DriveApp.getFileById("コピー元のシートID");
// 出力先フォルダ
var OutputFolder = DriveApp.getFolderById("格納先のフォルダID");
// 出力ファイル名
var OutputFileName = templateFile.getName().replace('テンプレート', '')+date;
//テンプレートのリネーム&コピー
var CopiedFile = templateFile.makeCopy(OutputFileName, OutputFolder);
//コピーしたシートのID取得
var CopiedFileId = CopiedFile.getId();
//シートにコピー先のシートIDを書き込み
LogFileSheet.getRange("A1").setValue(CopiedFileId);
//■Phase3
//コピーへの書き込み確認
var CopiedFileSheet = SpreadsheetApp.openById(CopiedFileId).getSheetByName('コピー元');
var Cells = CopiedFileSheet.getRange(1, 1, 1, 8);
var Values =Cells.getValues();
//チェックボックス判定
for (var i=0; i<Cells.getNumColumns(); i++){
if (Values[0][i] === true) {
Logger.log("チェックがついています")
LogFileSheet.getRange("A2").setValue("チェックがついています");
LogFileSheet.getRange("A3").setValue("");
}else{
}
}
//■Phase4
//シートテンプレートをコピーしてを名前を日付に
var CopiedFile = SpreadsheetApp.openById(CopiedFileId);
var DateSheet = CopiedFileSheet.copyTo(CopiedFile);
var ActiveSheet = DateSheet.setName(date);
//シートを一番左に移動
CopiedFile.setActiveSheet(ActiveSheet);
CopiedFile.moveActiveSheet(1);
}応用例
Logger.log()ではなくGmailApp.sendEmail()に変更してメール通知を送信- 日付の形式を
yyyyMMdd_HHmmに変更して同日内の複数回実行に対応 - チェック済みの行やデータのみを抽出して別処理へ渡す構成への拡張
この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
GASでシートを操作する記事は、ほかにもあります。




まとめ
本スクリプトで実現できる処理とメリットは以下のとおりです。
| 処理内容 | メリット |
|---|---|
| 日付ごとにテンプレートを複製 | 日付別の帳票作成・管理の手間を削減 |
| チェックボックス判定 | 事前確認や処理完了ステータスを自動判定 |
| 複製ファイルのIDを記録 | 複製先ファイルを検索する手間を削減 |
| シートのリネームと整理 | 最新シートが先頭に並び確認がスムーズに |
GASで定型業務を自動化し、日々の手作業を効率化しましょう。

よくある質問:GASでテンプレートを日付別に複製するときのチェックリスト
このスクリプトは、何を自動化しますか?
日付をもとにファイル名を付けてテンプレートのスプレッドシートをコピーし、チェックボックスの状態を確認して、コピーしたファイル内でシートを複製・リネームするまでを、一括で処理します。
日付は、どこから取得しますか?
スプレッドシートのA3セルにある日付(例:2019/08/26)を取得し、yyMMdd形式に変換して、190826のような形に整形します。
複製したファイルのIDは、どこに記録されますか?
複製したファイルのIDを、記録用シートのA1セルに書き込みます。複製先のファイルを探す手間を減らせます。
チェックボックスは、どの範囲を確認しますか?
複製したシートの1行目・1〜8列目を確認します。trueのセルがあればログに出力し、A2セルに結果を記録します。
同じ日に何度も実行すると、どうなりますか?
日付の形式がyyMMddだと、同日内の複数回の実行を区別しにくくなります。応用例にあるように、日付の形式をyyyyMMdd_HHmmに変更すると、同日内の複数回実行に対応できます。まず、テスト用のコピーで試してください。
完了をメールで知らせるには?
Logger.logではなくGmailApp.sendEmailに変更すると、メール通知を送信できます。通知先と本文は、実際に送る前にテストで確認してください。
チェック済みの行だけを、別の処理に渡せますか?
応用例として、チェック済みの行やデータのみを抽出して、別処理へ渡す構成へ拡張できます。元のコードを変更する前に、ファイルを複製しておくと安全です。
最初に試すときの注意点は?
指定したテンプレートファイルを複製するため、まずテスト用のテンプレートと保存先で試してください。画面やメニューは変わることがあるため、最新の操作は公式ヘルプで確認してください。
