SpreadSheet

【スプレッドシート】getLastRowとgetMaxRows の違い

GoogleAppsScript(GAS)でよく利用するメソッド、getLastRow と getMaxRows 2つのメソッドの違い具体的な使い方を紹介します。

getLastRow はデータが存在する最終行番号を返す

getLastRowの概要

getLastRow() は、データが存在する最終行の行番号を返すメソッドです。データが存在しなければ最終行として値を返しません。

特徴

  • アクティブシートの最終行にある値の行番号を返します。

getLastRow利用シーンと注意点

シートにある値の最終行を取得するときに利用できます。注意点として、空白セルや非連続データがある場合意図した最終行を取得できないことがあります。

コードサンプル

シートに記載されている値の最終行を取得して、メッセージに表示するサンプルを紹介します。そもそもシートに値が存在しない場合はスクリプトを終了する分岐を書いてます。

function checkLastRow() {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = ss.getActiveSheet()
    const lastRow = sheet.getLastRow();
    const lastColumn = sheet.getLastColumn();

    // 最終行にデータが存在しない場合、スクリプトを終了
    if (lastRow === 0) {
        SpreadsheetApp.getUi().alert('データが存在しません。');
        return; // スクリプトを終了
    }

    // 最終行にデータが存在する場合の処理
    const lastRowData = sheet.getRange(lastRow,lastColumn).getValue();
    SpreadsheetApp.getUi().alert('データが存在する最終行は "' + lastRow + '" で、データは "' + lastRowData + '" です。');
}

getLastRowの動作例

シートの値の最終行番号を返します。下記動作例では7行目にある値が最終行のため、7行目が最終行として取得されています。

getMaxRows はシートの最終行を返す

getMaxRowsの概要

getMaxRows()は、アクティブシートの値の有無に関係なくシートの最終行を返すメソッドです。例えばシートの最終行が「300」であれば、getMaxRows()は" 300 "を返します。

特徴

  • アクティブシートの値有無に関係なく、シートの最終行番号を返します。

getMaxRowsの利用シーン

  • スプレッドシートの行数制限を把握するために使用します。
  • 大量のデータを扱う場合、シートの最大行数を確認することでデータの入力や処理が可能かどうかを判断できます。
  • 定期的にデータを更新する自動化スクリプトを作成する際に、シートの行数を動的に管理するために使用します。
  • データの入力時に、getMaxRows を使って行数を確認し、制限を超えた場合にはエラーメッセージを表示する処理を追加します。

コードサンプル

アクティブシートの最終行を取得してメッセージに表示するサンプルGASです。

function checkMaxRow() {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = ss.getActiveSheet()
    const maxRows = sheet.getMaxRows();
    SpreadsheetApp.getUi().alert('シートの最終行は "' + maxRows + '" です。 "');
}

getMaxRowsの動作例

getMaxRows()を使うことで、シートに値がある状態でもシートの最終行(1000)を取得していることが分かります。

getMaxRows.gif

getLastRowとgetMaxRowsの違い

getLastRow()getMaxRows()の違いを表にまとめました。

項目getLastRowgetMaxRows
説明シート内で実際にデータが入力されている最後の行番号を取得します。シートの総行数(データの有無に関係なく存在する行数)を取得します。
対象範囲データが存在する範囲のみシート全体
用途データが入力されている範囲を動的に取得したい場合シート全体のサイズ(行数)を確認したい場合
戻り値の例(データが 10 行あり、シートに 100 行ある場合)10100
注意点空行を含まないため、実際の行数とは異なる場合があります。データがなくても行数がカウントされます。

getLastRow・getMaxRows 実際の使い分けサンプル

例1. A列の値の合計値を取得する(getLastRowを使う)

以下はアクティブシートのA列に入力されたシリアル値の合計を求める例です。

function sumDataInUsedRows() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // 実際にデータが入力されている最後の行を取得
  const lastRow = sheet.getLastRow();
  
  if (lastRow === 0) {
    Logger.log("シートにデータがありません。");
    return;
  }
  
  // データ範囲を取得 (A列から最後の行まで)
  const dataRange = sheet.getRange(1, 1, lastRow, 1); // A列のみ
  const data = dataRange.getValues();
  
  // データを合計
  const sum = data.flat().reduce((total, value) => total + (Number(value) || 0), 0);
  
  Logger.log(`データ範囲: A1:A${lastRow}`);
  Logger.log(`データの合計: ${sum}`);
}

例2. シート最終行に基づき不足行を追加する(getMaxRowsを使う)

アクティブシートの最終行が1001以下なら、不足行数を追加する例です。

function ensureMinimumRows() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // シート全体の行数を取得
  const maxRows = sheet.getMaxRows();
  const requiredRows = 1001; // 必要な行数
  
  if (maxRows < requiredRows) {
    // 不足分の行を追加
    const rowsToAdd = requiredRows - maxRows;
    sheet.insertRowsAfter(maxRows, rowsToAdd);
    Logger.log(`不足している ${rowsToAdd} 行を追加しました。`);
  } else {
    Logger.log("行数は十分です。");
  }
}

まとめ

getLastRow()getMaxRows()の違いまとめです。

  • getLastRow():シート内でデータが存在する最終行の行番号を取得するときに使う。
  • getMaxRows():シートの最大行数を取得するときに使う。

両者の特性を理解して使い分け、より効率的にスプレッドシートを操作しましょう。

スプレッドシート関連記事

https://it-info.blue/Spreadsheet

-SpreadSheet