こんにちは!
今回は「GASでgetLastRow()が正しく動作しないときの原因と対策」についてお伝えしたいと思います。
GASでgetLastRow()
は入力のある最後の行数が返ってくると思うのですが、期待する行数が返ってこないことがあるようです。(後ほど詳しくまとめます)
普段Javascript(Node.js)
で環境している人がGASを使っていると不便さを感じてしまう今日このごろです。
GASでgetLastRow()が正しく動作しないときの原因
先に結論から...
原因はセルに関数が含まれていたからでした。
以下のように、見た目上は空が設定されていても、getLastRow()の結果は3ではなく、9が返却されてしまいます。
// GAS
const allSheet = spreadsheet.getSheets(); // シートすべて取得
const sheet = allSheet[0] // 1シート目のシートを取得
const lastRow = sheet.getLastRow(); // 最後の行数を取得
console.log(lastRow); // 9
対策:getNextDataCell(SpreadsheetApp.Direction.DOWN)を使う
getLastRow()は使わず、getNextDataCell(SpreadsheetApp.Direction.DOWN)を使うことで解決しました。
上記コードの修正verになります。
// GAS
const startColumn = 1;
const firstCulumnRange = sheet.getRange(1, 2).getNextDataCell(SpreadsheetApp.Direction.DOWN); // B列で入力のある最終行を取得
const lastRow = firstCulumnRange.getRow();
console.log(lastRow); // 3
期待通り、関数を除く最終行を取得することができました。
参考
初心者でもわかるGoogle Apps Script活用のススメ
以上、お疲れさまでした〜🍵