【Googleスプレッドシート】特定範囲列のデータ入り最終行を調べる関数
2024年8月9日
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つの列の最終行だけ空白になっている場合、その列は無視され、値が入っている列が優先される仕様です。