A列に2020/01/01〜2020/01/19までの日付が入ったシートがあって
2行目からスタートして5行ずつA列の値を取得してみる。
ポイント
- 最後は5行ではなく4行残るので4行を取得する
- 10回繰り返すが実際は4回で終わるため、5回目以降でエラーが出ないようにする
20行くらいの処理ならこんなことをしなくても良いのだけれど
何千、何万行のデータを処理する時に実行回数を分けたいケースにぶつかって
軽い処理で書いてみたのがこのコードです。
コード.gs
function iterateFunction() { var numRows = 5; var startRow = 2; var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); for(var i = 0; i < 10; i++) { myFunction(sheet, startRow, numRows, lastRow); startRow = startRow + numRows; if(startRow > lastRow) { return;// startRowがlastRowより大きくなったらfor文から抜ける } } } function myFunction(sheet, startRow, numRows, lastRow) { if(startRow + numRows > lastRow) {// 取得しようとする最終行がデータの行数より大きくなるなら numRows = lastRow - startRow + 1;// numRowsを残りの行数で上書きする } var range = sheet.getRange(startRow, 1, numRows, 1); var values = range.getDisplayValues(); var dates = values.map(function(array) { return array[0] }); Logger.log(dates); } |
実行結果