【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行にたくさんの意味を盛り込むと、あとあと理解できなくなりそうなので分けて書くことが多いです。
ではスクリプトを実行している動画も載せておきます。
コピー → 完了を書き込み、が繰り返されているのがわかるかと思います。(ドライブに反映されるのに大分ラグはありますが、、、笑)
今日はここまでです。おつかれさまでした!
また次回、お会いしましょう(*'▽')
この記事が気に入ったらサポートをしてみませんか?