スプレッドシート最終行(列)を取得するスクリプト関連まとめ
Google app script(gas)のgetLastRow();とgetLastColumn();は、使い勝手がイマイチです。指定した列(範囲)の最終行を取得することが難しいからです。
指定した範囲の最終行の取得がしたかったので、もろもろ備忘録でまとめてみました。
目次
ソースコード紹介
先に結論となるコードを貼ります。
getLastRow、getLastColumn、指定した列の最終行を取得する場合のスクリプト3点を下記にそれぞれまとめてみました。
////////////////////////////////////////////////////////////////
// memo01「getLastRowで最終行の取得」
// ----------------------
// ⇒シート全体からの最終"行"の値を返す。
// ⇒融通悪し(getRangeなどで範囲を指定してからの最終値を取得できない)
// ⇒getLastRowを使う場合、パラメータ専用シートを作り、A1から書くと良い
////////////////////////////////////////////////////////////////
var ss_obj = SpreadsheetApp.getActiveSpreadsheet();
var ss_sheet_XX = ss_obj.getSheetByName("*******"); // 探索したいシート名を入力
var row_last_num = ss_sheet_XX.getLastRow();
////////////////////////////////////////////////////////////////
// memo02「getLastColumnで最終列の取得」
// ----------------------
// ⇒シート全体からの最終"列"の値を返す。
// ⇒memo01と同様に融通悪し
////////////////////////////////////////////////////////////////
var ss_obj = SpreadsheetApp.getActiveSpreadsheet();
var ss_sheet_XX = ss_obj.getSheetByName("*******"); // 探索したいシート名を入力
var row_last_num = ss_sheet_XX.getLastColumn();
////////////////////////////////////////////////////////////////
// memo03「指定した列の最終行を取得する」
// ----------------------
// ⇒getRangeで指定した範囲の最終行を取得可能
// ⇒下記サンプルは「*******」シートのB列・最終行を取得する場合
// ⇒B列に見出しなどある時は「row_last_num」に見出しの数量分を減算
////////////////////////////////////////////////////////////////
var ss_obj = SpreadsheetApp.getActiveSpreadsheet();
var ss_sheet_XX = ss_obj.getSheetByName("*******"); // 探索したいシート名を入力
var ss_range = ss_sheet_XX.getRange("B:B").getValues();
var row_last_num = ss_range.filter(String).length;
getLast系はちょっと使いにくい・・・
getLast系のメソッドは、シート全体からの最終行および最終列しか取得できないところが融通悪し、です。getRangeなどで範囲を指定してから探索させようとすると、getRangeの範囲の最終行を返してきます。
欲しい値は、getRangeの中で、データの存在する最終部分なのですが、どうやら仕様上、ダメなようです。(試しにやってみたら、なんかgetRangeで指定した範囲の最終行をそのまま返してくるようになってしまい、データの存在する最終行が分からず、です。)
VBAのxlUpやxlDownみたいなのがあれば良いんですが、残念・・・。ループさせたりして頑張ると、なんか取得できるらしいんですが、次項で紹介する方法のほうがスマートだったので、断念してしまいました。
(getLast系メソッドの特徴を考慮すると、これらを使う場合は、そのシートをパラメータ専用にしておいて、A1部から値を入力させる設計にしておくと便利かと思います。)
指定した範囲の最終行列数が欲しい時はコレ
先ほどのソースコードのmemo03部分。filterとlengthを使った方法だと、指定した列(指定した範囲)の中における、データの存在する最終行列の数を取得してくれるので、大助かりです。
この方法は、下記の記事様に紹介してあり、本当に助かりました。
⇒Google Apps Script - スプレッドシートで各列の最終行を求めるScript
きちんとVBAライクにカウントしてくれるので、とても素晴らしい方法でした。
まとめ
Google app scriptでは、パラメータ専用のシートであれば、getLast系メソッド。指定した範囲の最終値が欲しい時は、filterとlengthが良いかと思います!