GASでスプレッドシートの複数行のデータを扱う時の考え方 〜例えばhideRow〜 の続き
前振り
↑これの続き。
こんなツイートがあって、ほほう、気になる。
まずは、素直に、今回のhideRowの3パターンで実行時間を測定してみます。
測定方法
consoleクラスを使います。
コードは下記の通り。
コード実行→スプシでUndo(非表示をクリアする)→コード実行スプしで以下略 といった感じで計測しました。
/**
* B列 にチェックが付いている行を非表示にする
*/
function hideRow_01() {
console.time('hideRow_01')
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const lastRow = sheet.getLastRow();
// 1つずつ行を検索してif節の条件に合致する場合は非表示にする
for (let i = 1; i <= lastRow; i++) {
const targetCell = sheet.getRange(i, 2).getValue();
if (targetCell === true) {
//getRange(R1C1形式)
const range = sheet.getRange(`${i}:${i}`);
sheet.hideRow(range);
}
}
console.timeEnd('hideRow_01')
}
/**
* B列 にチェックが付いている行を非表示にする
*/
function hideRow_02() {
console.time('hideRow_02')
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const lastRow = sheet.getLastRow();
const targetRows = [];
const values = sheet.getDataRange().getValues();
// console.log(values)
// console.log(values[0])
// console.log(values[0][1])
// console.log(values[1][1])
for (let row = 0; row < values.length; row++) {
if (values[row][1] === true) targetRows.push(row + 1); // インデックス+1
}
// console.log(targetRows)
// 指定の行番号をhideRows
for (let i = 0; i < targetRows.length; i++) {
sheet.hideRows(targetRows[i]);
}
console.timeEnd('hideRow_02')
}
/**
* B列 にチェックが付いている行を非表示にする
*/
function hideRow_03() {
console.time('hideRow_03')
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const lastRow = sheet.getLastRow();
// 隠したい行番号を格納する配列
const targetRows = [];
const values = sheet.getDataRange().getValues();
// console.log(values)
values.forEach((rec, row) => {
// console.log(rec, row)
// console.log(row)
if (rec[1] === true) targetRows.push(row + 1); // インデックス+1
})
// console.log(targetRows)
// 指定の行番号をhideRows
targetRows.forEach(row => sheet.hideRows(row));
console.timeEnd('hideRow_03')
}
結果
分かっていたとはいえ、やっぱ早いな〜。
1回目
hideRow_01: 30654ms
hideRow_02: 462ms
hideRow_03: 437ms
2回目
hideRow_01: 14280ms
hideRow_02: 1053ms
hideRow_03: 566ms
3回目
hideRow_01: 25767ms
hideRow_02: 669ms
hideRow_03: 454ms
面白いな〜〜〜〜
雑いけど一旦めも!
いただいたサポートで、書籍代や勉強費用にしたり、美味しいもの食べたりします!