forEachの使い方をGASでマスター!初心者のための徹底解説

GASで配列を操作するのに、forEachってよく聞くんだけど、どうやって使うんだろう?ちょっと難しそうで…
猫男
猫男
catman
catman
やるならいまでしょ。catmanがGASのforEachをマスターするための道をお供するぞ

GASのforEachの使い方

GAS(Google Apps Script)のforEachは、配列を便利に操作するためのメソッドだ。

基本的なforEachの使い方

まずは基本から。

forEachは配列の各要素に対して、指定した処理を一つ一つ順番に実行するんだ。

 const numbers = [1, 2, 3, 4, 5];
numbers.forEach(function(number) {
  Logger.log(number);
}); 

このコードでは、numbersという配列の各要素をログに出力している。

 

実行すると、次のようなログが出るはずさ。

1
2
3
4
5

indexやアロー関数を使ったforEach

GASのforEachでは、インデックスも利用できる。

 const fruits = ['apple', 'banana', 'cherry'];
fruits.forEach((fruit, index) => {
  Logger.log(index + ': ' + fruit);
}); 

ここでは、アロー関数と一緒に使ってインデックスを出力している。

 

実行すると、次のようなログが出るはずさ。

0: apple
1: banana
2: cherry

なるほど、forEachでインデックスも取れるんだね!アロー関数も使いやすそう!
猫男
猫男

GASのforEachのループからスキップ・抜ける方法

たまにさ、GASのforEachのループでスキップしたり、抜けたりしたいよな?

forEachでスキップする

特定の条件でスキップしたい場合、continueは使えないけど工夫次第で似たような動作ができるんだ。

 const numbers = [1, 2, 3, 4, 5];
numbers.forEach((number) => {
  if (number === 3) return; // 3をスキップ
  Logger.log(number);
}); 

この場合、「3」だけがログに出力されないようになっている。

 

実行すると、次のようなログが出るはずさ。

1
2
4
5

forEachを途中で抜ける

しかし、途中で抜ける(break)ことはできない!

スクリプトの見直しが必要だ。for文やsomeメソッドの使用を検討しよう。

GASのforEachを二次元配列で使う方法

二次元配列の場合でもforEachは強力だ。

二次元配列を含むデータでは、二重にforEachを効かせるといい。

 const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
matrix.forEach(row => {
  row.forEach(value => {
    Logger.log(value);
  });
}); 

各要素が順番に出力されることで、二次元配列を簡単に扱える。

 

実行すると、次のようなログが出るはずさ。

1
2
3
4
5
6
7
8
9

二次元配列もforEachでうまく扱えるんだね。これなら難しくないかも!
猫男
猫男

応用編:GASで二次元配列や連想配列を使ったforEach

応用編まで駆け抜けるぞ!

スプレッドシートのデータを取得し、操作する際にも使える。getRangeと配列を組み合わせよう。

 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const range = sheet.getRange('A1:C3');
const values = range.getValues();

values.forEach(row => {
  row.forEach(value => {
    Logger.log(value);
  });
}); 

スプレッドシートのデータを配列形式で取得し、forEachでそれぞれの値を出力している。

本当にいろんな場面で使えるんだね!GASのforEachがいまでは友だちみたいだ。
猫男
猫男

 

練習問題:GASのforEachを試してみよう

以下のスクリプトを完成させて、1から10までの偶数だけをログに出力してみてください。

 const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// ここにforeachを使った処理を書く

 

 

解答と解説

完成したスクリプトはこちらです。

 const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
numbers.forEach((number) => {
  if (number % 2 === 0) {
    Logger.log(number); // 偶数のときログに出力
  }
}); 

解説:
numbersという配列から始め、forEachメソッドを使用し、配列の各要素にアクセスしています。
number % 2 === 0で偶数を判断し、条件が一致する場合にのみLogger.logで出力しています。