見出し画像

【Google Apps Script 通信 vol.3】スプレッドシートをコピーしよう!番外編|不要なシートを非表示にしよう

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

前回の記事を書きながら、そういえば複製元ファイルに社員一覧シートを入れたままだったと気づきました。(実際に各社員に配布する場合は、きっと不要なシートになりますよね。)

良い機会なので、不要なシートを非表示にする方法を学びましょう!

前回までの記事はこちら

1.シート非表示

シートを非表示するためには・・・たったこれだけです。

 sheet.hideSheet();

前回までのスクリプトの冒頭に差し込みましょう。(4行目が該当です)

function myFunction() {

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

// 社員一覧シートを非表示 ★ここを追加
sheet.hideSheet();

// 氏名データテーブルの最終行を取得
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("1d48sZOAdz5CFpyTBD7OY62b0KYrFserGT48rRpKiKSI");
 var OutputFolder = DriveApp.getFolderById("1hSCJTDF27-SA__0yd26Zf3zbvbhHEkom");  
 templateFile.makeCopy(filename, OutputFolder);
  
  // 社員一覧シートに完了を書き込む
  var range = sheet.getRange("C"+i).setValue("完了");   

}}

複製前に非表示にするのであれば、手動で1回非表示にしちゃってもいいのですが…(笑)今回は学びのために(*'▽')

2.どうして繰り返し処理の中に非表示を入れないの?(GASのタイムリミットの話)

環境構築不要かつ無料!で使用できるGASですが、実は1回のスクリプト実行時間にはタイムリミットがあるのです。(ウルトラマン的な感じで)

契約内容によるのですが多くの方の場合は上限6分です。

そう、6分以内に処理を完了させないといけない。

(terateilの回答だとBusiness か Enterprise の契約にすれば30分に伸びるらしい。)

繰り返し処理の中に非表示を入れると繰り返し回数分、非表示を実行することになるので、その分実行時間が伸びてしまいます。

そのため1回の非表示で済むように、前段部分に差し込みました。

おまけ|処理を高速化する方法

なにやら配列の知識を手に入れると、より高速化できるようです。

ただ配列を扱うためには配列概念の習得から必要なので、私はいったん保留にしてます…(笑)

下記サイトに解説が載っているので、気になる方は参考にしてみるとよいかも!

ではまた次回!



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