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関数)を行うことで、データの先頭行へ移動することができる。

確認のため行数を出力してみると、正しく参照できていることが分かるはずだ。