Google Apps Script

【GAS】1行で書ける!特定列の最終行・特定行の最終列を取得する方法

ねぇもりさん。GASで、スプレッドシートの最終行と最終列を取得したいんだよね
もり
もり
それならgetLastRowメソッドとgetLastColumnメソッドがあるよ
うーん、それだとシート全体の最終行・最終列になっちゃうじゃん??それじゃ困るんだよね
もり
もり
なるほどね。特定の行・特定の列を取得したいんだね!

スプレッドシートの最終行・最終列を取得する方法を紹介します。

  • 「特定列」の「最終行」
  • 「特定行」の「最終列」

参考サイト:Re: 【GAS】指定行の最終列番号・指定列の最終行番号を取得する

特定列の最終行を取得する方法

A列最終行を取得する方法です。2通りあります。

  1. 列の先頭行から方向に取得する
  2. 列の最終行から方向に取得する
GASで特定列の最終行を取得する

コードの紹介です(解説は後の項でしますよ!)

特定行の最終列を取得する方法

1行目最終列を取得する方法です。2通りあります。

  1. 行の先頭列から方向に取得する
  2. 行の最終列から方向に取得する
GASで特定列の最終行を取得する

コードがこちら!

getNextDataCellメソッドとは?

ポイントは、RangeオブジェクトのgetNextDataCellメソッドです。

Rangeオブジェクト.getNextDataCell(direction)

指定の方向(direction)の次のセルを返します。データが含まれる連続したセル範囲の端、または、その方向のスプレッドシートの端のセルです。これは、スプレッドシート上のCtrl+[矢印キー]と同じ動作です。

引数directionに指定できるのは下記の4種類です。

引数 説明
SpreadsheetApp.Direction.DOWN 方向(行インデックスの増加)
SpreadsheetApp.Direction.UP 方向(行インデックスの減少)
SpreadsheetApp.Direction.NEXT 方向(列インデックスの増加)
SpreadsheetApp.Direction.PREVIOUS 方向(列インデックスの減少)

DOWNとNEXTを使用するときの注意点

スプレッドシート全体でA1セルのみに値が入ってる状態で、DirectionにDOWNとNEXTを指定すると、

  • DOWN → A列の”シート全体の”最終行が取得される
  • NEXT → 1行目の”シート全体の”最終列が取得される

※これはgetNextDataCellメソッドが、スプレッドシートの[Ctrl + 矢印キー]と同じ挙動をするためです。

また、途中で空白セルが存在する場合、空白セルの前のセルを取得します。

よって、下方向の検索(DOWN)・右方向の検索(NEXT)は以下の場合のみ使用しましょう。

  • 最低でも2行(2列)以上、存在する
  • データの途中に空白セルが存在しない

コードの解説

「A列の最終行から上方向に取得するコード」を、3つの処理に分解します。

  1. A列の”シート全体の”最終行のセルを取得する
    → getMaxRows():スプレッドシート全体の最終行を取得するメソッド
  2. A列の最終セルでCtrl+↑を押した時に選択されるセルを取得
  3. ②で取得したセルの行番号を取得(getRow)

以上の3つの処理を1行(※)で書くとこうなります!(※sheetを取得する処理は除く)

サンプルコード

サンプルコードをいくつか作ってみました。ポイントはgetRangeメソッドの行・列の指定が変わるだけですね。

コードまとめ

GASで、スプレッドシートの「特定列の最終行」「特定行の最終列」を取得する方法を紹介しました。

getLastRowメソッド,getLastColumnメソッドでは目的の値が取得できない…って場合に、ぜひ使ってみてくださいね。

GASで最終行と最終列を取得する

コードのまとめです!