見出し画像

GAS超入門② - 配列についてマスターする

はじめに

GASを使っていると、【配列】という概念の理解が必須です。
前回も習いましたが【スプレッドシートの範囲を選択して値を取得】する時なんかは、実際には2次元配列というもので返ってきています。

また、次回で解説しますが、スプレッドシートに値を入れる時にも、setValuesというメソッドがあり、これも引数に2次元配列を受け取ります。

なので、JavaScriptを使う上でも、GASを使う上でも配列について理解しておくことはとても重要です。


配列とは

これまで、JavaScriptの基礎で【変数】というものを習ったと思います。【変数】には数字や文字列、関数を入れることができました。

配列は、タンスみたいなものです。タンスの中に複数の値を入れることができます。

スクリーンショット 2020-06-29 23.58.16


この例で言えば、1段のタンスの中に、「名前」「科目」「点数」という値が入っていて、それぞれの値には0から順に番号がついています

データを取得するときには、【point[2]】のようにして取得します。

2次元配列とは

この配列だけだとあまり美味しさが分かりませんね。
冒頭で話した、スプレッドシートを扱う時にも2次元配列を扱うという話をしました。この2次元配列をマスターしておけば、スプレッドも自在に操れるようになります。

スクリーンショット 2020-06-29 23.58.22

これはかなり直感的ですよね。Excelと同じです。

スクリーンショット 2020-06-29 23.57.47

まさにこれと同じものを2次元配列で表現した形になるのですが、通常スプレッドシートで、西田の国語の点数は【C3】というセルから取得しますよね。

でも、GASでgetValuesした結果の2次元配列からは、【points[2][2]】として取得します。
難しいように思いますが、縦5段のタンスがあって、西田の国語のデータは3段目に入ってるので、まず【point[2]】でその引き出しをあけて引き出しの中の3列目に点数が入ってるので、【point[2][2]】として取り出してるだけです。
(プログラミングの世界では、数字が0から始まるので、感覚と1つずれるので注意です)

連想配列とは

さてここまで2次元配列まではマスターできました。
でも、西田の国語の点数を取得するのに【points[2][2]】ってするのは直感的じゃないですよね。

そこで便利なのが連想配列です。連想配列は、キーの値を文字列にすることができます。

スクリーンショット 2020-06-29 23.58.35

こんな感じで、西田の合計点を取得するには、【points["西田"]["合計"]】とすれば取れます。

かなり直感的ですよね。

さぁ、ここまでは概念的なところなので、実際にJavaScriptを書きながら、配列を操作してみましょう。

1次元配列を扱う

まずはGASでこのように1次元配列を宣言して、ログに出してみましょう。

function myFunction() {
 let points = ["名前", "科目", "点数"]

 // 配列の値全てを取得
 Logger.log(points)
 
 // 3番目の要素を取得する
 Logger.log(points[2])
}

スクリーンショット 2020-06-30 00.10.27

2次元配列を扱う

function myFunction() {
 let points = [
   ["名前", "科目", "点数"],
   ["西田", "数学", 20],
   ["西田", "国語", 98],
   ["寺西", "数学", 45],
   ["寺西", "国語", 60],
 ]

 // 1行目を取得
 Logger.log(points[0])
 
 // 西田の国語のデータを取得
 Logger.log(points[2])

 // 西田の国語の点数を取得
 Logger.log(points[2][2])
}

スクリーンショット 2020-06-30 00.13.01


簡単ですね!

連想配列を扱う

さぁ、最後に連想配列を使ってみましょう。

これは少し厄介で、【キー】と【値】のペアで成り立つデータ構造で宣言します。

スクリーンショット 2020-06-30 00.22.27

このように、キーと値は「:(コロン)」で区切って宣言します。今回の例だとこんな感じですね。

スクリーンショット 2020-06-30 00.22.31

ここから西田の値を取得するには...

スクリーンショット 2020-06-30 00.22.36

このようにアクセスすることができます。先程説明したとおり、数字でアクセスするよりも直感的ですよね。配列の時みたいに[]でもOKですし、.(ドット)でアクセスしてもOKです。

これは複数宣言することも可能です。

スクリーンショット 2020-06-30 00.30.35

こんな感じで、1つのキーに対して、オブジェクトを値に設定できます。これの何が嬉しいのでしょうか?次の宣言を見てください。

スクリーンショット 2020-06-30 00.30.40

このように、西田というキーに対して、合計と平均を持った連想配列を値として登録することで、西田の合計。や、寺西の平均が簡単にかつ直感的に取れるようになります。

スクリーンショット 2020-06-30 00.24.41

こんな感じですね。これもコードを書いてみましょうか。

function myFunction() {
 let points = {
   '西田' : {'合計' : 118, '平均' : 59},
   '寺西' : {'合計' : 105, '平均' : 52.5},
 }

 Logger.log(points['西田']['合計'])
 Logger.log(points.西田.合計)
}

これも、連想配列のときは{}で過去って、キーと値を:(コロン)で区切って宣言する。さえ覚えておけば簡単ですね。

結果は次の通りです。

スクリーンショット 2020-06-30 00.32.28

さて、次回はこの配列を理解した上で、スプレッドシートから値を取得して、計算した結果を別のシートに書き込む。

というところをやってみますので乞うご期待!

さいごにお願い

このnoteの「スキ」ボタンを押してください🙇‍♂️ 
(嬉しいメッセージが出てくるかも?笑)

シェアしてください🙇‍♂️
(モチベーション上がって有益情報を引き続き発信しまくります!


実践編で利用するための基礎編はすべて無料公開してます。 基礎編のモチベーション向上のためにサポートして頂けるとめちゃくちゃ喜びます!! だいたい作業工数は1記事あたり4-5時間程度かけて【分かりやすい】【知識が身につく!】を意識して作っておりますので、今後も頑張っていきます!