Google Apps Script

【GAS】指定行の最終列番号・指定列の最終行番号を取得する

スプレッドシートで最終行・最終列を取得したい!ことってありますよね

 

もりさん
もりさん
それなら簡単だよ!メソッドがあるじゃん

 

sheetオブジェクト.getLastRow()
スプレッドシートのデータ範囲の最終行を取得する

sheetオブジェクト.getLastColumn()
→スプレッドシートのデータ範囲の最終を取得する

 

このメソッドを使用して、スプレッドシートを検索してみます。

lastrowcol1

 

コードがこちらです。「最終行=7」と「最終列=5(E列)」が取得できます。

 

モリ
モリ
ちがう!そうじゃないんだ!
B列の最終行は?とか、
3行目の最終列は?が知りたいぞ

 

もりさん
もりさん
あ、なるほどね~

 

「特定の列」の最終行の行番号を取得する

関数を作ってみました。

 

B列の最終行=5が取得できました。

lastrowcol2

filterメソッドを使用しています。引数にStringを与えると、データが存在する要素のlengthを取得できます。

Arrayオブジェクト.filter()
→配列の内容を特定の条件で絞り込む

 

「特定の行」の最終列の列番号を取得する

こちらも関数を作ってみました。

 

3行目の最終列=4(D列)が取得できます。

lastrowcol3

空白セルがある場合も取得できる?

このように、途中に「空白セル」がある場合を試してみました。

lastrowcol4

コードがこちらです。関数findLastRowとfindLastColの中身は、上で示したコードと同じです。

最終行と最終列ではありませんね・・・。

 

モリ
モリ
データが存在するセルの個数になってるな

 

逆向きループで取得してみる

データを少し変えてみました。※getLastColumn()で取得する最終列は8です。

lastrowcol5

3行目の最終列番号6を取得するコードがこちら。

 

【処理の概要】

getLastColumn()で取得する最終列(8)までの1行を、二次元配列RowValuesに格納する。

配列の中身を逆向きループでチェックし、もし空でなければ、その要素番号が最終列となる。
ただし、要素番号は0から始まるので、スプレッドシートの列番号に合わせるため+1する。

 

もりさん
もりさん
う~ん、もっと良い方法ないかな・・・

 

もりとモリの編集後記

モリ
モリ
なるほど、勉強になったぞ

 

もりさん
もりさん
VBAだとEnd(xlDown)、End(xlUp)で簡単に取得できるのに、GASはダメだな~

 

モリ
モリ
おい!その発言はよくないな

 

もりさん
もりさん
え・・・?

 

モリ
モリ
恋人から「昔の彼女は~~だったのに、おまえはダメだな」とか言われたら悲しいだろ?

 

もりさん
もりさん
う、うん・・・それは傷つくね

 

モリ
モリ
それと同じだ。プログラミング言語に優劣をつけるのはよくないぞ

 

もりさん
もりさん
たしかに・・・そうかもね

 

モリ
モリ
今、幸せになりたいなら、昔の恋人と比べないで、今の恋人を全力で愛するんだ!

 

モリさん、なんか脱線してますね。

 

モリ
モリ
今、勉強中の言語を本気で上達したいなら、他の言語と比較しないで、その言語を全力で愛するんだ!いいな?!