GAS超入門② - 配列についてマスターする
はじめに
GASを使っていると、【配列】という概念の理解が必須です。
前回も習いましたが【スプレッドシートの範囲を選択して値を取得】する時なんかは、実際には2次元配列というもので返ってきています。
また、次回で解説しますが、スプレッドシートに値を入れる時にも、setValuesというメソッドがあり、これも引数に2次元配列を受け取ります。
なので、JavaScriptを使う上でも、GASを使う上でも配列について理解しておくことはとても重要です。
配列とは
これまで、JavaScriptの基礎で【変数】というものを習ったと思います。【変数】には数字や文字列、関数を入れることができました。
配列は、タンスみたいなものです。タンスの中に複数の値を入れることができます。
この例で言えば、1段のタンスの中に、「名前」「科目」「点数」という値が入っていて、それぞれの値には0から順に番号がついています。
データを取得するときには、【point[2]】のようにして取得します。
2次元配列とは
この配列だけだとあまり美味しさが分かりませんね。
冒頭で話した、スプレッドシートを扱う時にも2次元配列を扱うという話をしました。この2次元配列をマスターしておけば、スプレッドも自在に操れるようになります。
これはかなり直感的ですよね。Excelと同じです。
まさにこれと同じものを2次元配列で表現した形になるのですが、通常スプレッドシートで、西田の国語の点数は【C3】というセルから取得しますよね。
でも、GASでgetValuesした結果の2次元配列からは、【points[2][2]】として取得します。
難しいように思いますが、縦5段のタンスがあって、西田の国語のデータは3段目に入ってるので、まず【point[2]】でその引き出しをあけて、引き出しの中の3列目に点数が入ってるので、【point[2][2]】として取り出してるだけです。
(プログラミングの世界では、数字が0から始まるので、感覚と1つずれるので注意です)
連想配列とは
さてここまで2次元配列まではマスターできました。
でも、西田の国語の点数を取得するのに【points[2][2]】ってするのは直感的じゃないですよね。
そこで便利なのが連想配列です。連想配列は、キーの値を文字列にすることができます。
こんな感じで、西田の合計点を取得するには、【points["西田"]["合計"]】とすれば取れます。
かなり直感的ですよね。
さぁ、ここまでは概念的なところなので、実際にJavaScriptを書きながら、配列を操作してみましょう。
1次元配列を扱う
まずはGASでこのように1次元配列を宣言して、ログに出してみましょう。
function myFunction() {
let points = ["名前", "科目", "点数"]
// 配列の値全てを取得
Logger.log(points)
// 3番目の要素を取得する
Logger.log(points[2])
}
2次元配列を扱う
function myFunction() {
let points = [
["名前", "科目", "点数"],
["西田", "数学", 20],
["西田", "国語", 98],
["寺西", "数学", 45],
["寺西", "国語", 60],
]
// 1行目を取得
Logger.log(points[0])
// 西田の国語のデータを取得
Logger.log(points[2])
// 西田の国語の点数を取得
Logger.log(points[2][2])
}
簡単ですね!
連想配列を扱う
さぁ、最後に連想配列を使ってみましょう。
これは少し厄介で、【キー】と【値】のペアで成り立つデータ構造で宣言します。
このように、キーと値は「:(コロン)」で区切って宣言します。今回の例だとこんな感じですね。
ここから西田の値を取得するには...
このようにアクセスすることができます。先程説明したとおり、数字でアクセスするよりも直感的ですよね。配列の時みたいに[]でもOKですし、.(ドット)でアクセスしてもOKです。
これは複数宣言することも可能です。
こんな感じで、1つのキーに対して、オブジェクトを値に設定できます。これの何が嬉しいのでしょうか?次の宣言を見てください。
このように、西田というキーに対して、合計と平均を持った連想配列を値として登録することで、西田の合計。や、寺西の平均が簡単にかつ直感的に取れるようになります。
こんな感じですね。これもコードを書いてみましょうか。
function myFunction() {
let points = {
'西田' : {'合計' : 118, '平均' : 59},
'寺西' : {'合計' : 105, '平均' : 52.5},
}
Logger.log(points['西田']['合計'])
Logger.log(points.西田.合計)
}
これも、連想配列のときは{}で過去って、キーと値を:(コロン)で区切って宣言する。さえ覚えておけば簡単ですね。
結果は次の通りです。
さて、次回はこの配列を理解した上で、スプレッドシートから値を取得して、計算した結果を別のシートに書き込む。
というところをやってみますので乞うご期待!
さいごにお願い
このnoteの「スキ」ボタンを押してください🙇♂️
(嬉しいメッセージが出てくるかも?笑)
シェアしてください🙇♂️
(モチベーション上がって有益情報を引き続き発信しまくります!
実践編で利用するための基礎編はすべて無料公開してます。 基礎編のモチベーション向上のためにサポートして頂けるとめちゃくちゃ喜びます!! だいたい作業工数は1記事あたり4-5時間程度かけて【分かりやすい】【知識が身につく!】を意識して作っておりますので、今後も頑張っていきます!