【getLastRow】スプレッドシートのシートの最終の行番号を取得する

GoogleAppsScript

【getLastRow】メソッドは

Google スプレッドシートのシートで何らかのデータを持つ最終の行番号を取得するメソッド

です。

 

公式リファレンスの該当ページはこちら

 

また、getLastRowメソッドに似たメソッドとしてシートの最終の列番号を取得するgetLastColumnメソッドについても解説しております。(内容はほぼいっしょです)

クラス

【Spreadsheetクラス】【Sheetクラス】【Rangeクラス】

getLastRowメソッドは上記の3つのクラスのオブジェクトから利用することができます。

getLastRowメソッドで取得することができる最終行の番号は、それぞれのクラスごとに若干意味合いが変わってきますので、その効果を確認した上で、必要に応じて使い分けていきましょう。

 

記述方法

getLastRowメソッドの記述方法を3種類それぞれ出力内容の違いも合わせてご紹介していきます。

違いについてもわかりやすくご紹介していくために、sheetとsheet2との2種類のシートを持つスプレッドシートファイルを用意しました。

 

Spreadsheetクラス

 

SpreadsheetクラスからのgetLastRowメソッドの呼び出しはgetActiveSpreadsheetメソッドなどによりSpreadsheetクラスのオブジェクトを取得してから利用するのが基本です。

さて、出力結果ですが、こちらはスプレッドシートの中でアクティブ状態になっているシートの最後の行番号が出力されます。行番号ですが、列に関係なく何らかのデータを持つセルの最終行数を出力します。

 

setActiveSheetメソッドはスプレッドシートのアクティブになっているシートを設定することができるメソッドです。

上記の例ではsheet、sheet2をそれぞれアクティブ状態にした場合のgetLastRowメソッドの結果を記しています。

アクティブ状態になっているシートの最大行数を取得していることがおわかりになりましたでしょうか?

 

このように、SpreadsheetクラスのオブジェクトからgetLastRowメソッドを利用すると、実行時にどのシートがアクティブ状態になっているかで結果が変わってしまうので、後述するSheetクラスのオブジェクトからgetLastRowメソッドを利用したほうが思わぬミスを発生しにくくできるのでオススメです。

 

Sheetクラス

 

SheetクラスからのgetLastRowメソッドの呼び出しはSheetクラスのオブジェクトを取得してから利用します。

getActiveSheetメソッド以外にもSheetクラスのオブジェクトを取得する方法として、getSheetByNameメソッドでシートの名前を指定して取得したり、getSheets()メソッドで全シートを配列として取得してからインデックス番号でシートを指定取得する方法などもあります。

 

さて、出力結果の違いなのですが、こちらは先述したSpreadsheetクラスからの呼び出しと違い、 取得したSheetの最終行の番号を取得することができるものとなります。

 

そのため、仮にプログラムの処理途中でアクティブなシートが変更された場合でも、行数を取得したい対象のシートのオブジェクトを変数などでしっかりと確保しておけば対象となるシートが変更される恐れがありません。

 

そのため、特定のシートについての処理を行うべくgetLastRowメソッドを利用したい場合には、なるべくSheetクラスを取得してから利用するのが間違いを防ぐという意味で望ましいと言えるでしょう。(もちろん、実現したいプログラム次第にはなりますが笑)

 

Rangeクラス

 

RangeクラスからgetLastRowメソッドを利用する場合にはgetRangeメソッドなどでRangeクラスのオブジェクトを取得してから行います。

上記のサンプルではA1〜C10までのセル範囲をgetRangeメソッドでRangeオブジェクトとして取得してからgetLastRowメソッドで最終行数を取得しています。

 

さて、getLastRowメソッドの出力結果なのですが、Rangeオブジェクトとして取得したセル範囲の最終行の番号が出力されます。

先ほどまでのgetLastRowメソッドの実行結果とは違い、Rangeオブジェクトとして指定されたセルに何らかのデータが記録されていなくても行数としてカウントされます!

 

上記のように、セル範囲が変更されると、再選択されたセルの最終行の番号を取得します。

また、Rangeオブジェクトとして選択されたセル範囲の行数を取得しているわけではないことに気をつけてください!

A3〜C10のRangeオブジェクトは行数8、列数3のセル範囲になりますが、getLastRowメソッドで取得できるのはあくまで行番号になりますので、セルC10の行番号である10が戻り値として取得できます!

 

以上、同じgetLastRowメソッドでも親オブジェクトによって取得できる値が大きく違ってくることがありますので、用途に応じてお間違いのないように利用してください!

戻り値

【Integer】

シートの中で値などのデータが記録されている最後の行までの数を整数で返します。

 

スプレッドシートのセルデータを行ごとにfor文で回していくなど、戻り値として取得した行数を配列のインデックス値として利用したい場合ですが、配列インデックス値が0から起算するのに対して、getLastRowで取得できる行数は1から起算され実際にある行数を返すメソッドになりますので、

行数 – 1 = 配列インデックス値

ということを念頭に置いて利用する必要があります。

※getLastRowメソッドでカウントの対象となる行がない場合については当然戻り値は0になります。

使用例

※後日追記予定

関連メソッド

以下のメソッドも確認しておくと、よりgetLastRowを活用することが可能です。(後日追加予定)

yoshi

JavaScript、Google Apps Scriptがメイン。Pythonもちょっとだけ。Google Apps Script開発、Pythonスクレイピングなどをする機会が多いです。ご依頼なども承っております。 記事内容についてのご意見・ご指摘などいただけますと幸いです。

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする