見出し画像

【Google Apps Script 通信 vol.3】スプレッドシートをコピーしよう!②

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

今回はいよいよ複数ファイルを一括でコピーするスクリプトを書いていきましょう!

再掲|やること

・売上管理ファイルシートを社員一覧数分コピー

・コピーしたファイル名を【売上管理】社員名とする

前回の記事はこちらから!


1,繰り返し処理について

まずは基本的な繰り返し処理、1から10までの値をLogで表示してみましょう。

これから紹介するコード以外にも繰り返し実行する方法はあるかもしれないので、もし自分のやることが下記で実現できない場合はGoogleで【GAS 繰り返し】などと検索してみてください(*'▽')

function myFunction() {

 for (var i = 1; i <= 10; i++){ // 1から10まで繰り返す、iは1ずつ増やす
  Logger.log(i); // iの値を増やす
  }  
}

コードの詳細は下記の通りです。

for(){} : 繰り返し実行する
        ※()内に繰り返しを実行する条件、{}内に繰り返し実行する処理を入れる

var i = 1 : iを1からスタートする

i <= 10  : iが10まで

i++  : 1回の処理ごとにiを1ずつ加算する

Logger.log(i) : iの値をログ表示する
※別にiでなくとも問題ありません
 プログラミングの世界では数値の変数をi,jにすることが多いようです。

いつも通り、スクリプト実行の動画を載せておきます。

ちなみに動画内のスクリプトは

function myFunction() ではなく function loop()にしていました。myFunctionの部分は任意の名前を付けることができます。

また複数のスクリプトを作成したときに、すべてmyFunctionだと意図したものが実行されない場合があるので、注意してください。

蜘蛛マークの隣で実行スクリプトを選択できるので、覚えてください(*'▽')

無題

2.社員一覧のすべての氏名をLogで表示させよう

繰り返し処理の書き方がわかったところで、次は社員一覧シート内のすべての氏名をLogで表示させてみましょう。

先ほどは表示させる数値を①範囲:1から10まで②増減式:1ずつ増やすとしました。

今回は氏名のデータテーブルが対象になるので、

①範囲:データテーブルの1番上の行から、1番下の行まで(B3~B30セル)

②増減式:行番号を1ずつ増やす とする必要があります。

では、実際のスクリプトを見ていきましょう。

function loop() {

// 社員一覧シートにアクセス
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(); //指定した範囲の値を取得
  Logger.log(name); //ログを表示
  
  }}

3.複数ファイルを一括でコピーする

いよいよここまで来ました!

あとは前回作成したスクリプトと、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);

}}

おつかれさまでした!

最終的なスクリプトにたどり着くまで、いろいろなパーツを組み合わせてきましたね。

このnoteのようにスクリプトを紹介している記事はたくさんありますが、自分のやりたいことと完全一致している記事はない場合が多いでしょう。

そんな時に自分のやりたいいことを小さなパーツに分けることができると、1つずつGoogleで調べて組み合わせていくことができるので、実現可能性がぐんと上がります。

会社でやっている人がいない…ぴったりの記事がない…と諦めずに、一歩ずつ進んでいきましょう!


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