便利なGASレシピ集!に戻る場合は以下から
Contents
はじめに
どうも、ビジボットです。
今回の記事はGoogleAppsScript (GAS) でスプレッドシートの最終行を求める方法を紹介していきます。GASで最終行を求めるシーンは数多くあり、大きく2パターンの記述方法を紹介したいと思います。セルの最終行を取得すると、for文の繰り返し処理を行う時にとても役に立つレシピです。
最終行を求めたいシートを用意
取得したいデータが入っているスプレッドシートを用意します。
今回のデータは11行までのサンプルデータを入れて、仮で用意してます。このデータの最終行を求めていく処理を紹介していきます。

以下関連記事は、初心者がGASを始める初歩的な内容をまとめた記事です。この関連記事にもサンプルコードと実際にログで出力された結果を記載しているので参考にしてみてください。
最終行を取得するレシピ①
1 2 3 4 5 6 |
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); // getLastRow()でデータがセットされている最終行を取得する var lRow = sheet.getLastRow(); Logger.log('最終行は:' + lRow + 'です'); } |
Logger.logの結果
1 |
[19-06-28 01:25:41:604 JST] 最終行は:11です |
求める値が取得できました。
「getLastRow()」を使うパターンは注意が必要な点があります。
データに統一性がない場合

このように、求めたいデータは空白を除外したデータの個数なのに、空白の数もカウントされて16行目の16という数字を取得してしまいます。
Logger.logの結果
1 |
[19-06-28 01:30:28:796 JST] 最終行は:16です |
最終行を取得するレシピ②
1 2 3 4 5 6 7 8 9 10 11 12 |
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); // getLastRow()でデータがセットされている最終行を取得する var lRow = sheet.getLastRow(); Logger.log('最終行は:' + lRow + 'です'); // A列の値を取得する var getVal = sheet.getRange('A:A').getValues(); // 空白を除いた長さを取得する lRow = getVal.filter(String).length; Logger.log('最終行は:' + lRow + 'です'); } |
Logger.logの結果
1 2 |
[19-06-28 01:41:32:786 JST] 最終行は:16です [19-06-28 01:41:32:980 JST] 最終行は:14です |
それぞれの取得結果で数値が異なりました。
「filter(string).length」を使う事で取得した値の長さを取得します。
filter(string).lengthの中身
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); // getLastRow()でデータがセットされている最終行を取得する var lRow = sheet.getLastRow(); Logger.log('最終行は:' + lRow + 'です'); // A列の値を取得する var getVal = sheet.getRange('A:A').getValues(); // 空白を除いた長さを取得 lRow = getVal.filter(String).length; // ログで中身を覗いてみる Logger.log(getVal.filter(String)); Logger.log('最終行は:' + lRow + 'です'); } |
Logger.logの結果
1 2 3 |
[19-06-28 01:46:14:297 JST] 最終行は:16です [19-06-28 01:46:14:510 JST] [[No], [1.0], [2.0], [3.0], [4.0], [5.0], [6.0], [7.0], [8.0], [9.0], [10.0], [12.0], [13.0], [15.0]] [19-06-28 01:46:14:512 JST] 最終行は:14です |
「Logger.log(getVal.filter(String)); 」を書く事で、ログ上に取得した結果が表示されました。データを見てみると、No〜15までの値を取得して配列データになってます。これに「length」をつける事で、要素の数を返してくれていたという事がわかります。
最終行の取得方法は、データのタイプによって「最終行を取得するレシピ①」を使うか、「最終行を取得するレシピ②」を使うか、分けても大丈夫です。
便利なGASレシピ集!に戻る場合は以下から