GAS配列処理完全ガイド|Google Apps Script初心者向けに実務レベルまで解説
GAS(Google Apps Script)を触り始めた頃、ほぼ全員がぶつかる壁があります。 それが「配列処理」です。
最初は意味不明なんです。 「なぜ取得したデータが二重のカッコなの?」 「for文が長すぎて頭が混乱する…」 「getValues()の中身が理解できない…」
でも、旅行で地図の見方を覚えると急に移動が楽になるように、 GASも配列が理解できた瞬さに景色が変わります。
実務で毎日のようにGASを書く中で感じるのはこれです。
- ロジック=配列操作
- 入力と出力=SpreadsheetApp
つまり、GASは極端に言えば「配列処理ゲーム」。 この記事では初心者でも理解できるように、実務目線で体系的に整理していきます。
GAS配列処理の基本|配列とは何か
配列とは簡単に言うと、 「複数のデータをまとめて管理する箱」です。
let list = [10, 20, 30];
イメージはこんな感じです。
index: 0 1 2
[10,20,30]
重要なのは0から始まること。 ここを忘れるとエラーの原因になります。
GAS配列処理の基本操作
値を取得する
let list = [10,20,30];
Logger.log(list[0]);
結果は「10」。 配列名+角括弧+番号で取得できます。
値を書き換える
list[1] = 50;
結果:
[10,50,30]
要素を追加する(push)
list.push(40);
結果:
[10,20,30,40]
最後のデータを削除する(pop)
list.pop();
末尾の要素が削除されます。
GAS配列処理で最重要の繰り返し処理
配列は持っているだけでは意味がありません。 中身を回して処理して初めて価値が出ます。
for文の基本
let list = [10,20,30];
for(let i=0;i<list.length;i++){
Logger.log(list[i]);
}
初心者の頃は長く見えますが、意味は単純です。
- i=0から始める
- 配列の長さまで繰り返す
- 1回ごとにiを増やす
forEachで簡潔に書く
list.forEach(function(item){
Logger.log(item);
});
実務ではこちらを使う場面も多いです。 コードが短くなり読みやすくなります。
GAS初心者最大の壁|2次元配列を理解する
GAS最大の特徴。 それがスプレッドシート=2次元配列という考え方です。
const data = sheet.getDataRange().getValues();
例えばシートがこうだったとします。
| 名前 | 年齢 |
|---|---|
| 鈴木 | 30 |
| 田中 | 25 |
取得するとこうなります。
[
["名前","年齢"],
["鈴木",30],
["田中",25]
]
最初見た時、「何これ…」となります。 でも旅行の乗換案内みたいなもの。 慣れると普通になります。
2次元配列のアクセス方法
data[1][0];
結果:
鈴木
意味はこうです。
- 最初の[] → 行番号
- 次の[] → 列番号
つまり、
data[1][1]
なら「30」になります。
GAS実務で頻出|2次元配列ループ処理
for(let i=0;i<data.length;i++){
for(let j=0;j<data[i].length;j++){
Logger.log(data[i][j]);
}
}
二重ループ。 最初は難しく感じます。 でも仕組みは単純。
- 外側=行を回す
- 内側=列を回す
実務で多い1行ずつ処理するパターン
for(let i=1;i<data.length;i++){
let name = data[i][0];
let age = data[i][1];
Logger.log(name + ":" + age);
}
ポイントはここ。
i = 1
ヘッダー行を除外しています。 実務ではかなり頻出です。
GAS配列処理で必須のmap・filter・find
map|データ変換
let result = list.map(function(x){
return x * 2;
});
結果:
[2,4,6]
既存データを加工したい時の定番です。
filter|条件抽出
let result = list.filter(function(x){
return x >= 20;
});
結果:
[20,30]
条件に合うものだけ残します。
find|1件取得
let result = list.find(function(x){
return x === 20;
});
最初に見つかった1件だけ取得します。
GAS実務テンプレ|スプレッドシート配列処理
function processArray(){
const sheet =
SpreadsheetApp
.getActiveSpreadsheet()
.getActiveSheet();
const data =
sheet.getDataRange().getValues();
const result =
data.map((row,i)=>{
if(i===0){
return [...row,"倍"];
}
return [...row,row[1]*2];
});
sheet
.getRange(
1,
1,
result.length,
result[0].length
)
.setValues(result);
}
これがGAS実務の王道パターンです。
流れ
- 取得
- 配列化
- 加工
- 一括書き込み
1セルずつ触らない。 これが高速化の基本です。
GAS配列処理のよくあるミス
indexミス
data[1][2]
存在しない列を参照するとエラーになります。
null・undefinedを見落とす
if(row[1])
空セルがある場合は注意です。
getValues()を1次元配列と思い込む
これは初心者あるある。
getValues()は必ず2次元配列。 ここを覚えるだけでもかなり前進します。
GAS配列処理まとめ|最重要ポイント
- 1次元配列=単純データ
- 2次元配列=スプレッドシート
- forEachは実務頻出
- mapは加工
- filterは抽出
- findは検索
- GAS高速化の基本は配列一括処理
最後に核心をもう一度。
取得 → 配列 → 処理 → 一括書き込み
GASを書く時間が増えるほど、この流れに何度も戻ってきます。 配列を理解できれば、GASは一気に面白くなります。
最初は難しく感じても大丈夫。 旅行先の路線図も、何日か歩けば自然に覚えるように、 配列も触るほど体に馴染んできます。
GASを実務で使いこなしたいなら、 まずは今日紹介した配列処理を何度も動かしてみてください。 成長速度が変わります。







0 件のコメント:
コメントを投稿