みなさんこんにちは!GASおじさんです。
「GASでスプレッドシートを自由自在に操るためのスキル習得講座」の第4回です。
前回の記事はこちら。
前回は単一セルの値を取得するgetValueメソッドについて学習しました。
今回は複数セルの値を取得するgetValuesメソッドについて解説していきます!
複数のセルの値を取得するgetValuesメソッド
まずは下準備として以下のようなシートを用意してみてください。
という文字を入力しています。
では、この状態で次のコードをエディタにコピペして実行してみてください。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const values = sheet.getRange('A1:E3').getValues();
console.log(values);
}
こちらを実行すると、以下のような実行結果になりました。
console.log(values);
とすると、「変数valuesには今どういう値が入ってますか?」というのを実行ログ画面で教えてくれるんでしたね。
実行ログは以下のようになっているので、
変数valuesは以下のような二次元配列になっているというわけですね。
values = [
[ 'あ', 'い', 'う', 'え', 'お' ],
[ 'か', 'き', 'く', 'け', 'こ' ],
[ 'さ', 'し', 'す', 'せ', 'そ' ]
];
ではなぜvaluesはこのような二次元配列になっているのか。valuesは以下の4行目で定義されています。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const values = sheet.getRange('A1:E3').getValues();
console.log(values);
}
ここで今回の主題であるgetValuesメソッドが使われています。
sheet.getRange('A1:E3').getValues();
とすることで、「A1からE3の範囲の値を取得してください」という意味になります。
ポイントとしては、getValuesメソッドで値を取得する場合は、二次元配列の形式で取得されるということですね。
ここで、単一のセルの値を取得するgetValueと、複数のセルの値を取得するgetValuesを見比べてみましょう。
単一のセルの値を取得するgetValue
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const value = sheet.getRange('A1').getValue();
console.log(value);
}
複数のセルの値を取得するgetValues
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const values = sheet.getRange('A1:E3').getValues();
console.log(values);
}
こうやって見比べるとよく似ていますね。
2つの違いを以下のようにまとめてみました。
単一セルの値の取得 | 複数セルの値の取得 | |
---|---|---|
範囲指定 | getRange(‘A1’) | getRange(‘A1:E3’) |
メソッド | getValue() | getValues() |
取得される値 | ▼単一のデータ value = ‘あ’; | ▼二次元配列 values = [ [‘あ’, ‘い’, ‘う’, ‘え’, ‘お’], [‘か’, ‘き’, ‘く’, ‘け’, ‘こ’], [‘さ’, ‘し’, ‘す’, ‘せ’, ‘そ’] ]; |
本連載の第2回「setValuesで複数のセルに値を入力しよう」で、
「setValueとsetValuesを間違えるミスはよくあるので、単数形と複数形の違いはよく意識しておきましょう」
ということを述べましたが、今回も同じです。
初学者のうちはgetValueとgetValuesを間違えるミスが多いので、単数形と複数形の違いを意識することが非常に大切です。
また、範囲指定の方法は、A1記法による書き方と、番地指定による書き方があります。
以下のように書くと、「1行1列目から、3行5列分の範囲(つまりA1からE3まで)の値を取得してくださいね」という意味になります。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const values = sheet.getRange(1, 1, 3, 5).getValues();
console.log(values);
}
ここらへんはそろそろ慣れてきたでしょうか?
getRangeメソッドで複数のセルの範囲を指定する方法は、
getRange('A1:E3')
のように、「A1記法」で範囲を指定する方法getRange(1, 1, 3, 5)
のように、「何行何列から、何行何列分」という番地で範囲を指定する方法
の2つがあるんでしたね。
これも以下の第2回の記事で解説済みなので、まだ理解できてない人はしっかり復習してきましょう。
getValuesで値を取得してsetValuesで値を入力してみよう
それでは今回も、「getValuesで値を取得して、setValuesで別のセルに値を入力する」ということをやってみましょう。
以下のコードをエディタにコピペして実行してみてください。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const values = sheet.getRange('A1:E3').getValues();
sheet.getRange('A5:E7').setValues(values);
}
実行後、スプレッドシートを確認すると…
A5からE7の範囲に二次元配列が入力されていることが確認できました!
前回同様やっていることは単純で、「A1〜E3の範囲をコピーしてA5〜E7にペーストする」ということをプログラムで実行しただけですね。
では、以下のプログラムも実行してみましょう。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('シート1');
const values = sheet.getRange(1, 1, 3, 5).getValues();
sheet.getRange(9, 1, values.length, values[0].length).setValues(values);
}
これは、
- 1行1列目から、3行5列分(つまりA1からE3)の値を取得して、
- 9行1列目から、3行5列分(つまりA9からE11)に入力する
という意味のコードですね。
実行すると以下のように、A1からE3セルをコピーして、A9からE11セルにペーストする動きを実現できます。
1点注意すべきポイントとして、番地で範囲指定した後にsetValuesメソッドを使うときは、次のように書くのでしたね。
- sheet.getRange(開始行, 開始列, values.length, values[0].length).setValues(values);
これについても、以下の第2回の記事で解説していますので、理解があやふやな人は見返してきましょう。
まとめ
以上、getValuesで複数のセルの値を取得する方法について解説してきました。
ポイントはやはり「二次元配列」ですね。この二次元配列という概念がとにかくやっかいで、初学者はここでつまづきがちです。
また、setValueとsetValues、getValueとgetValuesの4つのメソッドがごっちゃになってしまうというのも初学者がつまづきやすいポイントですね。
今回までで上記4つのメソッドを解説してきましたが、知識が増えてくると頭の中がごちゃごちゃになってくるので、今一度この4つの意味を整理しておきましょう。
まず、「setが入力」で「getが取得」という2分類で整理してください。
- セルに値を入力するためのメソッド・・・setValue, setValues
- セルの値を取得するためのメソッド・・・getValue, getValues
次に、それぞれ単数形と複数形があるので、合計4分類ですね。
そして「複数形の場合は『二次元配列』の形式でデータを扱う」というところが特に重要なポイントです。
理解が曖昧な人は第1回から第4回までを通しで読んでみて、頭の中を整理してみてください。
次回は「別のシートにsetValuesするにはどうしたらいいか?」という問題を解決していきます。
以下をクリックして次に進みましょう!
連載目次: GASでスプレッドシートを自由自在に操るためのスキル習得講座
- 【GASの始め方】まずはスプレッドシートの操作から始めてみよう
- 【GASの始め方】setValuesで複数のセルに値を入力しよう
- 【GASの始め方】getValueで値を取得してsetValueで入力しよう
- 【GASの始め方】getValuesで複数のセルの値を取得しよう
- 【GASの始め方】getValuesして別のシートにsetValuesしよう
- 【GASの始め方】応用問題で関数について学ぼう
- 【GASの始め方】繰り返し処理の「for文」を習得しよう
- 【GASの始め方】flat()でループさせる配列を自動生成しよう
- 【GASの始め方】for文とif文でデータ抽出して配列を生成しよう
- 【GASの始め方】TextFinderで行と列を特定しよう
- 【GASの始め方】オブジェクトとメソッドについて学ぼう
- 【GASの始め方】リファクタリングで生成AIを活用しよう
Udemy動画解説
当シリーズはUdemyで動画解説をしています。
動画で学びたい方は以下からご購読ください。Udemyでは月2〜3回セールが開かれますので、セール期間中にご購入いただくのがオススメです。
コメント