目次
- new Date() 現在時刻の取得をします。
- 配列 名前を格納する配列です。
- push 空の配列に名前を追加するメソッドです。
- forループ 1000行分繰り返します。
- getRange() シートの範囲を取得します。
- setValues() セル範囲に値を代入。(複数系の命令)
今回は100行のデータから1000行のデータに増やしてみます。
GASではgetRange()やsetValue()などのシートを読み書きする処理には時間を要します。
では、1000行の処理にかかる時間を計ってみます。
new Date()
実行前の時刻を変数startTimeと宣言します。
var startTime = new Date();
処理にかかった時間:現在時間 ー startTime(実行前の時刻)
経過時間をlogでみてみましょう。
Logger.log(new Date() - startTime);

2157.0秒(ミリ秒表示なので約2秒強)かかりました。
ここまでの処理を見ておきます。

時間短縮の方法を見ていきます。
時間がかかるシートの読み書きを一度で済むように
前もって配列scoresを準備し、forループ構文で配列に名前を格納しておきます。
配列
では、配列を宣言します。
var scores = [];
push
配列scoresに名前を追加するにはpushメソッドを使います。
scores.push([ //配列に追加する内容を記述 ]);
名前を入れていくには
names[Math.floor(Math.random() * names.length)]
でしたね。
点数は
Math.floor(Math.random() * 101
でした。
forループ
これらをforループ構文に入れてやります。
for (i = 1; i <= 1000; i++) { scores.push([ names[Math.floor(Math.random() * names.length)], Math.floor(Math.random() * 101) ]); }
getRange()
次にgetRange()でセルの範囲を取得します。
一行1列目から1000行2列分ですね。
sheet.getRange(1, 1, 1000, 2)
setValues()
その範囲にsetValues()で点数scoresの中身を入れます。
sheet.getRange(1, 1, 1000, 2).setValues(scores);
最後に終了時刻からstartTimeを引きます。
Logger.log(new Date() - startTime);
では実行結果を見てみます。「表示」→「ログ」ですね。

126ミリ秒ですから、0.126秒でした。
function initSheet() { var sheet = SpreadsheetApp.getActiveSheet(); var names = ['大久保','一橋','西郷','坂本','勝']; var i; var startTime = new Date(); var scores = []; sheet.clear(); // for (i = 1; i <=1000; i++) { // sheet.getRange(i, 1).setValue(names[Math.floor(Math.random() * names.length)]); // sheet.getRange(i, 2).setValue(Math.floor(Math.random() * 101)); // } for (i = 1; i <= 1000; i++) { scores.push([ names[Math.floor(Math.random() * names.length)], Math.floor(Math.random() * 101) ]); } sheet.getRange(1, 1, 1000, 2).setValues(scores); Logger.log(new Date() - startTime); }
コメント