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のおすすめ書籍

作業環境の作り方

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