Amazonプライム感謝祭開催中!セール会場へ

Googleスプレッドシート│テンプレートを日付別に複製&チェックボックス処理も自動化する

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に変更すると、メール通知を送信できます。通知先と本文は、実際に送る前にテストで確認してください。

チェック済みの行だけを、別の処理に渡せますか?

応用例として、チェック済みの行やデータのみを抽出して、別処理へ渡す構成へ拡張できます。元のコードを変更する前に、ファイルを複製しておくと安全です。

最初に試すときの注意点は?

指定したテンプレートファイルを複製するため、まずテスト用のテンプレートと保存先で試してください。画面やメニューは変わることがあるため、最新の操作は公式ヘルプで確認してください。

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

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

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

作業環境の作り方

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