今回は、Googleスプレッドシートで、1つのセルやセル範囲を取得する方法について解説します。
以下のシートを例に解説していきます。
getRange(行 ,列):1つのセルを取得する
以下のように、1つのセルの値を取得する際の方法を解説します。
1つのセルを取得する
getRange ( 行, 列 )
1つのセルの値のみを取得したい場合には、getRange(行, 列)を使います。
1つのセルを取り出すサンプル
let val = sheet.getRange(8, 4);
行(たて)→列(よこ)の順番で引数に指定します。行数・列数は1から数えます。今回は「パーカー」を取得したいので、8行目・4列目を指定しています。
値を取り出すにはgetValueを使う
getRangeメソッドで取り出した値の戻り値は、Rangeオブジェクトとなっています。オブジェクトにはセルの書式設定やフォント情報などが入っており、このままでは「パーカー」という文字列は取り出せません。
そのため、getValueメソッドでgetRangeメソッドの戻り値から中身のみ取り出します。
let val = sheet.getRange(8, 4);
console.log(val.getValue()); // 出力結果は「パーカー」
表示内容をそのまま取り出すならgetDisplayValue
getValueメソッドはセルのデータ型そのまま取り出します(日付は日付型、数値は数値型など)。24時間以上の時間の場合、取り出した際の値がシリアル値になるので注意が必要です。
スプレッドシートに表示されている値をそのまま取り出したい場合には、getDisplayValueを使います。
getRange(行 ,列, 行数):複数行を取得する
以下のように、複数行を取得する方法を解説します。
複数行を取得する
getRange ( 行, 列 , 行数)
複数行を取得する場合は、GetRange(行, 列, 行数)を使います。
複数行取り出すサンプル
let val = sheet.getRange(4, 6, 4);
行(たて)→列(よこ)→行数(たて) の順番で引数に指定します。行数・列数は1から数えます。行・列には取得する範囲の開始セルを設定し、そこから何行分取り出すかを指定します。
値を取り出すにはgetValuesを使う
先ほど同様、取り出した値はRangeオブジェクトとなっています。セルが1つのときはgetValueを使いましたが、セルが複数ある場合にはgetValuesメソッドを使います。
取り出した値は二次元配列になっています。二次元配列というのは、スプレッドシートのセルのように縦横で管理する配列です。見た目は普通の配列(一次元配列)と変わらないように見えますが、普通の配列は一方向で要素を管理しているのに対し、二次元配列は以下の図のように縦方向・横方向にインデックスが存在します。
二次元配列は、変数名[縦index][横index]で取得できます。
let val = sheet.getRange(4, 6, 4);
let arr = val.getValues();
let arrVal = arr[2][0];
console.log(arrVal); // 出力結果は10000
配列の値を先頭から順に取り出したい場合は以下のように書きます。
for (var i = 0; i < arr.length; i++) {
console.log(arr[i][0].toString());
}
表示内容をそのまま取り出すならgetDisplayValues
getValue同様、getValuesもデータ型が保持された状態で取得されます。日付型やパーセントなどがセルに入っている場合は、画面の表示と異なる表記となることがあります。
スプレッドシートの表示内容のまま取り出したい場合は、getDisplayValuesを使います。
getRange(行 ,列, 行数, 列数):範囲を取得する
以下のように、指定した範囲を取得する方法を解説します。
範囲を取得する
getRange ( 行, 列 , 行数, 列数)
複数行を取得する場合は、GetRange(行, 列, 行数, 列数)を使います。
範囲を取り出すサンプル
let val = sheet.getRange(5, 3, 4, 3);
行(たて)→列(よこ)→行数(たて)→列数(たて) の順番で引数に指定します。行数・列数は1から数えます。行・列には取得する範囲の開始セルを設定し、そこから何行分・何列分取り出すかを指定します。
値を取り出すにはgetValuesを使う
取り出した値はRangeオブジェクトとなっていますので、getValuesメソッドを使って値を取り出します。二次元配列はスプレッドシートのように縦方向・横方向にインデックスを持ちます。
先ほどの例で見てみると、以下のようになります。
二次元配列は、変数名[縦index][横index]で取得します。
let val = sheet.getRange(5, 3, 4, 3);
let arr = val.getValues();
let arrVal = arr[2][2];
console.log(arrVal); // 出力結果は「suica」
おさらい
今回の記事のおさらいです。
セルを取得するにはgetRangeを使う
getRange(行, 列):1つのセルを取得する
例:C2の値を取るとき → getRange(2 ,3)
getRange(行, 列, 行数):複数行を取得する
例:C2~C3の値を取るとき → getRange(2, 3, 2)
getRange(行, 列, 行数, 列数):範囲を取得する
例:A1~B3の値を取るとき → getRange(2, 1, 2, 2)
セルの値を取り出すにはgetValue/getValuesを使う
getValue:1つのセルの値を取り出す
取り出した値は数値は数値型、日付は日付型など書式を保持したまま取得される。スプレッドシートに表示されている内容をそのまま取得したい場合はgetDisplayValueを使う
getValues:複数セルの値を取り出す
取得した値は二次元配列となっている。getValuesをしたあとに、array[縦index][横index]のようにインデックスを指定したり、for文で配列を先頭から取り出すなどしてそれぞれの値を取り出す。
引数の順序は「たて・よこ・たて・よこ」で覚える
Google Apps Script(GAS)でスプレッドシートの操作をする際、getRangeメソッドでセルの位置や範囲を指定する機会は多いです。いざ使おうと思ったときに「引数って列と行どの順番で書くんだっけ・・・」と毎回調べるのは面倒ですよね。
そんなときは「GetRange たて・よこ・たて・よこ」で覚えておくと良いです。
そうはいっても、スプレッドシートを操作する関数は色々あるので忘れてしまうこともあるかと思います。そんなときは、ぜひこの記事に戻ってきてください!いつでも待ってます!
まとめ
今回は、Googleスプレッドシートで、1つのセルやセル範囲を取得する方法について解説しました。getRangeメソッドはよく使うのですが、引数が3つや4つになってくると順番がわからなくなってしまうことがあるので自分のための備忘録も兼ねてまとめてみました。
当ブログではGoogle Apps Script(GAS)を使って作業効率化や自動化を実現する方法、チャットボットを作る方法など、様々な実践記事を紹介しています。ぜひ参考にしていただければと思います!
コメント