本記事では、Googleスプレッドシートでセルに値が入っている最終行を取得する方法を解説します。

パターン別の取得方法とサンプルコード、具体的な活用方法についても説明します。Googleスプレッドシートで、最終行を取得したい場合に参考にしていただけたら幸いです。
事前準備:GASでスプレッドシートを取得する
スプレッドシートのセルを操作するには、GASで対象となるスプレッドシートの該当シートを開く必要があります。手順は以下の通りです。
スプレッドシートのIDを取得する
Googleスプレッドシートから最終行を取得したいファイルを開き、URLの赤枠部分をメモしておきます。うしろのほうにgidとありますがIDではありませんのでご注意ください。

GASで対象のスプレッドシートを開く
次に、GASのスクリプトエディタを開きます。myFunction()という中身が空の関数がデフォルトで作成されていますので、そこに以下を追加してください。

const SHEET_ID = 'スプレッドシートのIDを入力してください';
const spreadSheet = SpreadsheetApp.openById(SHEET_ID);
const sheet = spreadSheet.getSheetByName('テスト用シート');
function myFunction() {
}
これで事前準備は完了です。以降の説明ではこちらを設定済みであることを前提に、ソースコードでは省略して説明していきます。
getLastRow:最終行を取得する
スプレッドシートの最終行を取得するには、以下の方法で行います。
セルの最終行を取得する : getLastRow()
戻り値:値が入っているセルの最終行
サンプルコード:最終行を取得する
以下の表の最終行を取得します。

function myFunction() {
var lastRow = sheet.getLastRow();
console.log(lastRow); // 出力結果は「6」
}
getLastColumn:最終列を取得する場合
スプレッドシートの最終列を取得するには、以下の方法で行います。
セルの最終列を取得する : getLastColumn()
戻り値:値が入っているセルの最終列
サンプルコード:最終列を取得する
以下の表の最終列を取得します。

function myFunction() {
var lastColumn = sheet.getLastColumn();
console.log(lastColumn); // 出力結果は「3」
}
getNextDataCell:特定の列の最終行を取得する場合
スプレッドシートの特定の列の最終行を取得するには、以下の方法で行います。
セルの最終行を取得する : getNextDataCell(direction).getRow()
戻り値:特定の列の最終行
※direction・・・DOWN、UP、PREVIOUS、NEXTのいずれか
サンプルコード:最終行を取得する
以下の表のB列の最終行を取得します。

function myFunction() {
var lastRow = sheet.getRange('B1').getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
console.log(lastRow); // 出力結果は「5」
}
これは、スプレッドシート上で「Ctrl+方向キー」を押したときと同じ操作となります。ただし、途中に空白セルが含まれている場合は、空白セルの直前のセルの行が返ります。
実践編:頻出の操作をマスターしよう
ここからは、最終行を取得する際に合わせて実行することの多い操作について、サンプルコードを用いて説明します。
最終行の次のセルに書き込む
最終行の次のセルに書き込む場合は以下のように実装します。
function myFunction() {
var lastRow = sheet.getLastRow();
sheet.getRange(lastRow + 1, 1).setValue("〇梨");
}
上記コードの実行結果は以下になります。

getLastRowでは値が入っている最終行が取得できるので、書き込むセルはその次の行になります。セルに値を書き込む際にはgetRange(行, 列)でセルを指定します。そのセルに対してsetValue(書き込む値)で書き込みを行います。
セルに値を書き込む方法についての詳細は、以下記事をご参照ください。
最終行を削除する
最終行を削除する場合は以下のように実装します。
function myFunction() {
var lastRow = sheet.getLastRow();
sheet.deleteRow(lastRow);
}
例えば、家計簿を自動入力するアプリを作成して、データをスプレッドシートで管理しているとします。入力内容を誤って登録してしまい、直前のデータを消したい場合などに役に立ちます。
最終行まで同じ処理を繰り返す
最終行まで同じ処理を繰り返す場合は以下のように実装します。
function myFunction() {
var lastRow = sheet.getLastRow();
for (var i = 0; i < lastRow; i++) {
sheet.getRange(i + 1, 4).setValue(i + 1 + '行目です!');
}
}
上記コードの実行結果は以下になります。

うっかりやりがちな注意点
スプレッドシートで最終行を取得する際に注意したい点は以下の通りです。
スプレッドシートに意図せず値が入っていないか確認する
スプレッドシートで最終行を取得する際には、下のほうに余計な値が入っていないか確認することをおすすめします。

これは私自身も何度かやらかしていて、「値が追加されてない!なんで???」と思ったら下のほうに余計なデータが入ってた、なんてことがありました。こんなん注意してれば大丈夫!と思ったそこのあなた!忘れたころにこの罠にハマります。また、空白行や改行などもセルに値が入っていることになりますのでご注意。
関数も値が入っているとみなされる
セルに関数が入っている場合も、値が入っているとみなされます。以下は、A11に数式が入っている場合の例です。

値が入っているセルを特定できる場合は良いですが、複数個あって対応が大変だという場合は、新しくシートを作成したほうが良いでしょう。
まとめ
今回は、Googleスプレッドシートで最終行を取得する方法について紹介しました。最終行の取得は、データを追加していく際や、全てのセルに同じ処理を行う場合など、様々な場面で使用されます。スプレッドシートとGASを組み合わせると、実用的なツールを作成することができますので、作業効率化・自動化に是非活用してみてください。
当ブログでは、GASやスプレッドシートを使った様々なアイディアを投稿しています。参考にしていただければ幸いです。
コメント