【GAS】セル内消去。シートかセルで挙動が異なるので注意!
momeq
muchi-no-chi
*当ブログではアフェリエイト広告を利用しています。
今回は、GAS(Google Apps Script)で有名なFizzBuzz問題をやって見たいと思います。
今回は、FizzBuzzを1万行やってみるにゃ。また、速度も測定して、1行ずつセル入力する場合と、配列で一括入力の場合を比べてみるにゃ。
この記事は・・・
にお勧めです。
【VBA】VBAでFizzBuzzをやってみる。配列の速さも検証。
function myFunction() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const startTime = new Date();
for(let i = 1; i <= 10000; i++){
if(i % 3 == 0 & i % 5 == 0){
sheet.getRange(i, 1).setValue("FizzBuzz");
}else if(i % 3 == 0){
sheet.getRange(i, 1).setValue("Fizz");
}else if(i % 5 == 0){
sheet.getRange(i, 1).setValue("Buzz");
}else{
sheet.getRange(i, 1).setValue(i);
}
}
const endTime = new Date();
console.log((endTime - startTime) / 1000);
}
>> 31.801
1万行だと大体30秒オーバーとかなりおそくなるんだにゃ。クラウド環境だから、セル入力に時間がかなりかかるのがわかるにゃ。
function myFunction() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let ary = [];
let ary2d = [];
const startTime = new Date();
for(let i = 1; i <= 10000; i++){
if(i % 3 == 0 & i % 5 == 0){
ary.push("FizzBuzz");
}else if(i % 3 == 0){
ary.push("Fizz");
}else if(i % 5 == 0){
ary.push("Buzz");
}else{
ary.push(i);
}
}
for(let i = 0; i < 10000; i++){
ary2d[i] = [ary[i]];
}
sheet.getRange("A1:A10000").setValues(ary2d);
const endTime = new Date();
console.log((endTime - startTime) / 1000);
}
>> 0.354
0.35秒程度。一行ずつ実行するより100倍近い差が出ましたね。
配列を使うと実行速度が速くなります。その理由は、セル入力回数が少ないことが理由です。
GASの場合、クラウド環境のため、VBAよりも顕著にセル入力の速度の影響が出るんだにゃ。
そうですね。スプレッドシートは、特に6分で強制終了になることを考えると、配列を使用するメリットは高そうです。
【VBA】VBAでFizzBuzzをやってみる。配列の速さも検証。
独学で苦戦している人は、一度しっかりと基礎を学ぶと次のステップへ進めますよ。今のおすすめは、TechAcademy(テックアカデミー)ですね。
無料体験や相談もあるから、一度試してみてもいいんだにゃ!
\無料体験、無料相談はこちらから/