ExcelVBAでよく使われる終端セルを参照するEndプロパティは、キーボードで「Ctrl」+「矢印キー」(←、→、↑、↓)を押した時に移動するセルを参照するもので大変便利だった。
Google Apps Scriptでも同じような方法で特定のセル範囲から最終行・先頭行などを参照できないかと調べていたら、良い方法があったので紹介する。
セル範囲の最終行を取得する
例えば以下のように連続して値が入ったセル範囲があったとして、この終端となる204行目のセルを参照したいとする。
このような場合に、終端セルを参照するGASコードは以下のとおりとなる。
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getActiveSheet();
let lastRow = sheet.getRange(sheet.getMaxRows(), 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
console.log(lastRow);
// 出力結果:204
4行目、まずgetMaxRows()を使ってシート全体の最終行となるセルを基点とし、getNextDataCell(SpreadsheetApp.Direction.UP)を実行することで、「Ctrl」+「↑」を押した時に移動するセルを取得することができる。
確認のためgetRow()で行数を取得し出力してみると、セル範囲の最終となる204行目を取得できていることが確認できるはずだ。
セル範囲の先頭行を取得する
次は先程のセル範囲の先頭行を取得する例を紹介する。
13行目以前に別のデータが入っていたりする場合、先頭行を基点として取得しようとするのは危険なので、先程の最終行を取得するコードを応用して考える。
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getActiveSheet();
let firstRow = sheet.getRange(sheet.getMaxRows(), 1)
.getNextDataCell(SpreadsheetApp.Direction.UP)
.getNextDataCell(SpreadsheetApp.Direction.UP)
.getRow();
console.log(firstRow);
// 出力結果:18
まず、先程と同じようにシート最終行のセルから「Ctrl」+「↑」を押した時に移動するセルを参照する。
さらに続いて同じ操作(getNextDataCell関数)を行うことで、データの先頭行へ移動することができる。
確認のため行数を出力してみると、正しく参照できていることが分かるはずだ。