見出し画像

【Google Apps Script 通信 vol.3】スプレッドシートをコピーしよう!番外編|値を書き込んで、コピー完了を判断しよう

こんばんは。きゅうりです。

前回、スプレッドシートの一括コピーのスクリプトを作成しましたね。

シート数が多いほど完了までに時間がかかったり、「これ本当に全部完了した?」と不安になることがあると思います。(私はなるタイプです)

そんな懸念を拭うために、1ファイルずつ処理が完了したら【完了】のフラグを書き込むスクリプトを作成していきましょう。

前回までの記事

やること

・売上管理ファイルシートを社員一覧数分コピーし、ファイル名を【売上管理】社員名とする【前回まで】

・1ファイルずつコピーが完了する度に、氏名の横の列に完了と記載する

無題

1.値の書き込み

前回のスクリプトに追記する前に、シンプルな値の書き込み操作を確認しましょう。

任意のシートA1セルに値を書き込みたい場合は下記スクリプトを使用します。

function myFunction() {

// sheet1にアクセス(お好きなシートを指定してください)
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = spreadsheet.getSheetByName('sheet1');

// 値を書き込む範囲を指定
var range = sheet.getRange("A1");

// 値を書き込み
  range.setValue("GASで値を書き込みました!");
 
}

値の書き込みにはsetValue("入れたい値")を使うんですね。

2.1ファイルずつコピーが完了したら【完了】を書き込む

前回のスクリプトにたった2行追加しただけで完成です!(下から2行が該当)

※スクリプトをコピペする場合は、スプレッドシートID・フォルダIDの書き換えを忘れずに!

function myFunction() {

// 社員一覧シートにアクセス
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = spreadsheet.getSheetByName('社員一覧');

// 氏名データテーブルの最終行を取得
var lastrow = sheet.getLastRow();

// 繰り返し処理
for (var i = 3; i <= lastrow; i++){ //3から最終行まで繰り返す、iは1ずつ増やす(B3セルから取得したい値なので、iは3から始める)

  var range = sheet.getRange("B"+i); //値を取得したい範囲を指定
  var name = range.getValue(); //指定した範囲の値を取得

 // ファイル名を生成(ファイル名:【売上管理ファイル】○○○○)
 var filename = "【売上管理】" + name

 // 複製元スプシをコピー
 var templateFile = DriveApp.getFileById("ここにスプレッドシートIDを入れてください!");
 var OutputFolder = DriveApp.getFolderById("ここにフォルダIDを入れてください!");  
 templateFile.makeCopy(filename, OutputFolder);
  
  // 社員一覧シートに完了を書き込む ★ここを追加しました!
  var range = sheet.getRange("C"+i);
  range.setValue("完了");   

}}

実は2行に分けて書かなくても、下記のように1行にまとめることも可能です。

var range = sheet.getRange("C"+i).setValue("完了");   

非エンジニアの私は1行にたくさんの意味を盛り込むと、あとあと理解できなくなりそうなので分けて書くことが多いです。

ではスクリプトを実行している動画も載せておきます。

コピー → 完了を書き込み、が繰り返されているのがわかるかと思います。(ドライブに反映されるのに大分ラグはありますが、、、笑)

今日はここまでです。おつかれさまでした!

また次回、お会いしましょう(*'▽')

この記事が気に入ったらサポートをしてみませんか?