プログラミングには配列という単語がよく出てきます。もちろん、GASでも使用します。スプレッドシートでGASを動かすにはほぼ必須なのできちんと抑えておきましょう。
配列とは

配列とは変数を一列に並べた変数であり、変数とはデータを入れておく箱です。変数の中には数式や文字列などのデータを入れられます。つまり配列とはデータを囲っている箱なのです。
配列に格納された変数には添字が付けられ、取得したデータの一部を呼び出す時に使用します。添字は取得した順に0からの数字が自動的に振られています。
スプレッドシートに配列がよく使われる理由

スプレッドシートに配列がよく使われる理由は、スプレッドシートが規則正しく並んだデータベースだからです。通常、スプレッドシートには多くのデータが含まれていますが、そのデータは単に散在しているだけではなく行や列に規則的です。
例えば、顧客情報を記入したスプレッドシートの場合、名前や電話番号、メール、住所などのデータが一行に並んでいるのが一般的です。規則的に並んだデータを配列に取得することで関連した情報を素早くそして簡単に取り出すことができるのです。
配列で取得しないとどうなるのか
配列を使用しないとセルごとにデータを取得しなければなりません。次が配列を使用せずにデータを取得するコードです。
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var name = sheet.getRange("A2").getValue();
var nameHiragana = sheet.getRange("B2").getValue();
var age = sheet.getRange("C2").getValue();
var birthday = sheet.getRange("D2").getValue();
var email = sheet.getRange("E2").getValue();
var phoneNumber = sheet.getRange("F2").getValue();
var address = sheet.getRange("G2").getValue();
}

コードが長い割に取得できているのは一顧客分です。すべての顧客に対してこのようなコードを書いていては効率だけでなく可読性も悪くなりますし、処理速度の低下に繋がります。
配列を使えば短いコードで全顧客の情報を取得することができます。下記が配列を使ってデータを取得するコードです。
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getDataRange().getValues();
}
配列を取得しない場合とは違い、随分コードがスッキリしました。では次にさらに詳しく上記のコードについてご説明します。
スプレッドシートでのGASを使用した配列の取得方法
スプレッドシートのデータを配列で取得はgetDataRangeとgetValuesの二つのメソッドを今回使用します。
getDataRangeは実際にデータが入力されているセルの範囲を取得するメソッドで、getValues
はgetDataRangeが取得した範囲のデータを実際に配列で取得するメソッドです。
範囲を取得するgetDataRangeと実際にデータを取得するgetValues、どちらが欠けてもデータを配列で取得することはできません。

またgetValues()
メソッドを使用すると各行が1つの配列で取得されます。6行7列のデータがあれば、6つの配列の中にそれぞれ7つの変数が含まれた合計42個のデータを取得します。
ではこの顧客データをGASを使って配列で取得しましょう。
GASでスプレッドシートのデータを配列として取得する
先ほどもご紹介しましたが、下記はスプレッドシートの全てのデータを配列で取得するコードです。
function myFunction() {
//現在使用している(アクティブ)なスプレッドシートを指定
var ss = SpreadsheetApp.getActiveSpreadsheet();
//スプレッドシートの全データを取得する
var range = ss.getDataRange().getValues();
}
これでタイトル(ヘッダー)を含めて6配列が変数rangeに取得されています。次で確認しましょう。
配列を取り出す
配列で取得の確認はconsole.logというメソッドを使用します。実行ログで結果が出力されます。
function myFunction() {
//現在使用している(アクティブ)なスプレッドシートを指定
var ss = SpreadsheetApp.getActiveSpreadsheet();
//スプレッドシートの全データを取得する
var range = ss.getDataRange().getValues();
console.log(range[0]);//添字を使い1番目に取得した配列を表示
console.log(range[0][0]);//1番目に取得した配列の1番初めのデータを表示
console.log(range.length); //配列の数をカウント結果は6
console.log(range);
}

無事取得されていることがわかりました。またこのように変数(range)の中に複数の配列があるものを二次元配列と言います。二次元配列とは、配列の要素がさらに配列であるデータ構造。1次元配列と2次元配列の違いについてはまたの機会に。
まとめ
スプレッドシートのデータを配列に取得しただけではできることが少ないですが、配列を使用することでデータの取り扱いが非常に楽になります。初めは覚えることが多くて混乱するかもしれませんが、着実に覚えていきましょう!
コメント