【getLastColumn】スプレッドシートのシートの最終の列番号を取得する

GoogleAppsScript

【getLastColumn】メソッドは

Google スプレッドシートのシートで何らかのデータを持つ最終の列番号を取得するメソッド

です。

 

公式リファレンスの該当ページはこちら

 

また、getLastColumnメソッドに似たメソッドとしてシートの最終の行番号を取得するgetLastRowメソッドについても解説しております。(内容はほぼいっしょです)

 

クラス

【Spreadsheetクラス】【Sheetクラス】【Rangeクラス】

getLastColumnメソッドは上記の3つのクラスのオブジェクトから利用することができます。

getLastColumnメソッドで取得することができる最終列の番号は、それぞれのクラスごとに若干意味合いが変わってきますので、その効果を確認した上で、必要に応じて使い分けていきましょう。

 

記述方法

getLastColumnメソッドの記述方法を3種類それぞれ出力内容の違いも合わせてご紹介していきます。

違いについてもわかりやすくご紹介していくために、sheetとsheet2との2種類のシートを持つスプレッドシートファイルを用意しました。

 

 

Spreadsheetクラス

 

SpreadsheetクラスからのgetLastColumnメソッドの呼び出しはgetActiveSpreadsheetメソッドなどによりSpreadsheetクラスのオブジェクトを取得してから利用するのが基本です。

さて、出力結果ですが、こちらはスプレッドシートの中でアクティブ状態になっているシートの最後の列番号が出力されます。列番号ですが、行に関係なく何らかのデータを持つセルの最終列数を出力します。

 

setActiveSheetメソッドはスプレッドシートのアクティブになっているシートを設定することができるメソッドです。

上記の例ではsheet、sheet2をそれぞれアクティブ状態にした場合のgetLastColumnメソッドの結果を記しています。

アクティブ状態になっているシートの最大列数を取得していることがおわかりになりましたでしょうか?

 

このように、SpreadsheetクラスのオブジェクトからgetLastColumnメソッドを利用すると、実行時にどのシートがアクティブ状態になっているかで結果が変わってしまうので、後述するSheetクラスのオブジェクトからgetLastColumnメソッドを利用したほうが思わぬミスを発生しにくくできるのでオススメです。

 

Sheetクラス

 

SheetクラスからのgetLastColumnメソッドの呼び出しはSheetクラスのオブジェクトを取得してから利用します。

getActiveSheetメソッド以外にもSheetクラスのオブジェクトを取得する方法として、getSheetByNameメソッドでシートの名前を指定して取得したり、getSheets()メソッドで全シートを配列として取得してからインデックス番号でシートを指定取得する方法などもあります。

 

さて、出力結果の違いなのですが、こちらは先述したSpreadsheetクラスからの呼び出しと違い、 取得したSheetの最終列の番号を取得することができるものとなります。

 

そのため、仮にプログラムの処理途中でアクティブなシートが変更された場合でも、列数を取得したい対象のシートのオブジェクトを変数などでしっかりと確保しておけば対象となるシートが変更される恐れがありません。

 

そのため、特定のシートについての処理を行うべくgetLastColumnメソッドを利用したい場合には、なるべくSheetクラスを取得してから利用するのが間違いを防ぐという意味で望ましいと言えるでしょう。(もちろん、実現したいプログラム次第にはなりますが笑)

 

Rangeクラス

 

RangeクラスからgetLastColumnメソッドを利用する場合にはgetRangeメソッドなどでRangeクラスのオブジェクトを取得してから行います。

上記のサンプルではA1〜L3までのセル範囲をgetRangeメソッドでRangeオブジェクトとして取得してからgetLastColumnメソッドで最終列数を取得しています。

 

さて、getLastColumnメソッドの出力結果なのですが、Rangeオブジェクトとして取得したセル範囲の最終列の番号が出力されます。

先ほどまでのgetLastColumnメソッドの実行結果とは違い、Rangeオブジェクトとして指定されたセルに何らかのデータが記録されていなくても列数としてカウントされます!

 

上記のように、セル範囲が変更されると、再選択されたセルの最終列の番号を取得します。

また、Rangeオブジェクトとして選択されたセル範囲の列数を取得しているわけではないことに気をつけてください!

C1〜L3のRangeオブジェクトは行数3、列数10のセル範囲になりますが、getLastColumnメソッドで取得できるのはあくまで列番号になりますので、セルL3の列番号であるL…すなわち12が戻り値として取得できます!

 

以上、同じgetLastColumnメソッドでも親オブジェクトによって取得できる値が大きく違ってくることがありますので、用途に応じてお間違いのないように利用してください!

 

戻り値

【Integer】

シートの中で値などのデータが記録されている最後の列までの数を整数で返します。スプレッドシートの列はAから始まるアルファベット表記になっていますが、例えばA列であれば1、D列であれば4と最左から数えた番数の数字を返します。

 

スプレッドシートのセルデータを列ごとにfor文で回していくなど、戻り値として取得した列数を配列のインデックス値として利用したい場合ですが、配列インデックス値が0から起算するのに対して、getLastColumnで取得できる列数は1から起算され実際にある行数を返すメソッドになりますので、

列数 – 1 = 配列インデックス値

ということを念頭に置いて利用する必要があります。

※getLastColumnメソッドでカウントの対象となる列がない場合については当然戻り値は0になります。

 

使用例

※後日追記予定

関連メソッド

以下のメソッドも確認しておくと、よりgetLastColumnを活用することが可能です。(後日追加予定)

yoshi

JavaScript、Google Apps Scriptがメイン。Pythonもちょっとだけ。Google Apps Script開発、Pythonスクレイピングなどをする機会が多いです。ご依頼なども承っております。 記事内容についてのご意見・ご指摘などいただけますと幸いです。

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする