【Googleスプレッドシート】特定範囲列のデータ入り最終行を調べる関数

Google スプレッドシート上の Google App Script を使って、シートの指定範囲列で最後にデータが入っている行番号を調べる関数です。

// 指定範囲列で、最後にデータが入っている行番号を返す。
//
//   sheet    : 検索対象Sheetオブジェクト
//   startCol : 最終行を検索する列番号(開始位置)
//   endCol   : 最終行を検索する列番号(終了位置)
// 
function getLastDataRow( sheet, startCol, endCol ) {
  var cols = endCol - startCol +1;
  
  // 列範囲指定が不適切な場合はエラー
  if ( cols < 1 ) {
    return -1;
  }
  
  var lastRows = new Array(cols-1);
  for (var i = 1; i <= cols; i++ ) {
    // データ入りセルを1行目から下方向へ次セルを検索する場合
    // lastRows[i] = sheet.getRange(sheet.getMaxRows(), i).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
    // データ入りセルを最終行から上方向へ検索。
    lastRows[i-1] = sheet.getRange(sheet.getMaxRows(), i).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }
  
  // (空白セル列を想定し)最も大きい行番号を取得
  var lastRow = Math.max.apply(null, lastRows);
  
  return lastRow;
}Code language: JavaScript (javascript)

このソースでは最終行からデータ入りセルを上へスキャンしますが、コメント化してあるソースへ切り替えると、先頭行から下へスキャンするようになります。

以下、使用例。

var ss = SpreadsheetApp.getActiveSpreadsheet();

// シート名指定
var sheet = ss.getSheetByName('シート名');
    
// 1~2列目のデータ入り最終行番号取得
var lastRow = getLastDataRow(sheet,1,2) ;

Logger.log("The last row is "+ lastRow);Code language: JavaScript (javascript)

この関数では、指定範囲列でデータが入っている最も最後の行を返します。

これは具体的には、列単位で見たときに最終行が他の列より小さいものは無視され、最も大きい行番号が返される、ということです。例えば、複数列指定時、1つの列の最終行だけ空白になっている場合、その列は無視され、値が入っている列が優先される仕様です。

Hatena Pocket Line

コメントを記入