SpreadSheet

【スプレッドシート】getLastColumnとgetMaxColumns の違い

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

getLastColumnはデータが存在する最終列番号を返す

getLastColumnの概要

getLastColumn()は、データが存在する最終列の列番号を返すメソッドです。データが存在しない場合は最終列の値を返しません。

特徴

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

getLastColumn利用シーンと注意点

  • getLastColumn を使用することで、データが入力されている範囲を特定し、集計や分析を行う際に必要なデータを効率的に取得できます。
  • 特に列方向にデータが追加される場合に役立ちます。
  • データの範囲を動的に指定する際に、getLastColumn を利用して、スプレッドシートの最終列を基準に処理を行うことができます。
  • getLastColumn は、シート内の最終列を取得する際に、誤って入力されたデータ(例えば、空白のセルに誤って値が入った場合)も考慮します。
  • 列の途中に空白セルがある場合、getLastColumn はその空白セルの前までの列を最終列として認識します。

コードサンプル

シートに記載されている値の最終列をgetLastColumn()で取得して、メッセージに表示するサンプルを紹介します。シートに値が存在しない場合はその旨をメッセージに表示します。

function getcolumns() {
  const sht = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastcl = sht.getLastColumn();
  const lastrw = sht.getLastRow();

  // 最終列が0の場合のメッセージを設定
  const message = lastcl === 0 
    ? "シートに値がありません" 
    : "最終列は「" + lastcl + "」でセルは「" + sht.getRange(lastrw, lastcl).getA1Notation() + "」です";

  // メッセージボックスでメッセージを表示
  Browser.msgBox(message);
}

またgetLastRow()で最終行を取得、getA1Notation()でセル番地を取得してメッセージに表示します。

getLastColumnの動作例

getLastColumn-gas.gif

getMaxColumnsはデータが存在する最終列番号を返す

getMaxColumnsの概要

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

特徴

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

getMaxColumns利用シーンと注意点

  • getMaxColumns を使用することで、スプレッドシートの最大列数を把握し、必要に応じて列を追加したり削除したりする際に役立ちます。
  • データの入力や分析を行う際に、列数が足りない場合に自動的に列を追加するスクリプトを作成できます。
  • getMaxColumns は、スプレッドシートの最大列数を返しますが、これは必ずしもデータが存在する列数を意味しません。
  • 実際にデータが入力されている列数を確認するには、getLastColumn メソッドを併用することが推奨されます。

コードサンプル

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

function checkMaxColumns() {
    const ss = SpreadsheetApp.getActiveSpreadsheet(); // アクティブなスプレッドシートを取得
    const sheet = ss.getActiveSheet(); // アクティブなシートを取得
    const maxColumns = sheet.getMaxColumns(); // 最大列数を取得
    SpreadsheetApp.getUi().alert('シートの最大列数は "' + maxColumns + '" です。'); // アラートで表示
}

getMaxColumnsの動作例

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

getMaxColumns

getLastColumnとgetMaxColumnsの違い

getLastColumngetMaxColumns の比較

項目getLastColumngetMaxColumns
説明データが入力されている最後の列番号を取得シートの最大列数を取得
対象範囲データが存在する範囲のみシート全体
用途実際にデータが入力されている範囲を取得シート全体のサイズ(列数)を確認
戻り値の例データが5列ある場合は5を返すシートに最大で10列ある場合は10を返す
注意点空白列を含まないため、実際の列数とは異なる場合があるデータがなくても列数がカウントされる

getLastColumngetMaxColumns 実際の使い分けサンプル

例1. データが入力されている列の合計を取得する(getLastColumnを使う)

以下はアクティブシートのデータが入力されているセルの最終列番号を取得して、右に1列を挿入・挿入した列の一番上セルに「挿入」と記載するGASです。

function insertColumnWithText() {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // アクティブなシートを取得
    const lastColumn = sheet.getLastColumn(); // 最終列の列番号を取得

    // 最終列の右に1列を挿入
    sheet.insertColumnAfter(lastColumn);

    // 挿入した列の1番上のセルに「挿入」と記載
    sheet.getRange(1, lastColumn + 1).setValue("挿入");
}

例2. シートの最大列数に基づいて不足列を追加する(getMaxColumnsを使う)

以下はアクティブシートの列数が30以下であれば1列を追加するGASです。一応追加するかどうかalertで確認してから処理を開始します。

function onOpen() {
    const ui = SpreadsheetApp.getUi();
    ui.createMenu('カスタムメニュー')
        .addItem('不足列を追加', 'addMissingColumnsWithConfirmation')
        .addToUi();
}

function addMissingColumnsWithConfirmation() {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // アクティブなシートを取得
    const maxColumns = sheet.getMaxColumns(); // 最大列数を取得

    // 最大列数が30以下の場合、確認メッセージを表示
    if (maxColumns <= 30) {
        const ui = SpreadsheetApp.getUi(); // UIサービスを取得
        const response = ui.alert("最大列数が30以下です。1列挿入しますか?", ui.ButtonSet.YES_NO);

        // ユーザーの応答に基づいて処理を実行
        if (response == ui.Button.YES) {
            sheet.insertColumnAfter(maxColumns); // 最大列数の右に1列を挿入
            Logger.log("1列を追加しました。");
        } else {
            Logger.log("処理を終了しました。");
            return; // 処理を終了
        }
    } else {
        Logger.log("追加する列はありません。");
    }
}

まとめ

getLastColumn()getMaxColumns()の違いをまとめます。

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

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

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

https://it-info.blue/Spreadsheet

-SpreadSheet