last update 2020年4月2日 18:33

【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; }

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

以下、使用例。

var ss = SpreadsheetApp.getActiveSpreadsheet(); // シート名指定 var sheet = ss.getSheetByName('シート名'); // 1~2列目のデータ入り最終行番号取得 var lastRow = getLastDataRow(sheet,1,2) ; Logger.log("The last row is "+ lastRow);

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

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

コメントを記入