立入|ITブログ
【GAS】forEach関数 | 列単位で処理を行う

 

forEach関数を使って列単位で処理を行う

下記のようなスプレッドシートがあったとします。

A B C
1 鈴木 一郎 suzuki1@gmail.com
2 鈴木 二郎 suzuki2@gmail.com
3 鈴木 三郎 suzuki3@gmail.com

スプレッドシートから全ての値を取得すると、下記のような二次元配列が取得できます。

[[鈴木,一郎,suzuki1@gmail.com],[鈴木,二郎,suzuki2@gmail.com],[鈴木,三郎,suzuki3@gmail.com]]

ではこの二次元配列から、C列のアドレス全てにメールを送りたい時にはどうすればいいでしょうか?

メールを送るには下記のメソッドが使えます。

function メールを送信(メールアドレス){
	const タイトル = '鈴木さんへの重要なお知らせ'
	const 本文 =  'この会社に鈴木さんは3人いるみたいです。'
	GmailApp.sendEmail(メールアドレス, タイトル, 本文);
}

ここで問題になってくるのは、C列のメールアドレスをどうやって取得するかです。こういう時に便利なのがforEach文です。

forEach関数で列の特定の要素を繰り返し処理する

forEach関数では下記のような事が可能です。

//C列の各アドレスにメールが送信される
var values = [[鈴木,一郎,suzuki1@gmail.com],[鈴木,二郎,suzuki2@gmail.com],[鈴木,三郎,suzuki3@gmail.com]]
values.forEach(行 => メールを送信(行[2]))

下記と同じ処理を行っております。

var values = [[鈴木,一郎,suzuki1@gmail.com],[鈴木,二郎,suzuki2@gmail.com],[鈴木,三郎,suzuki3@gmail.com]]
for(var i=0;i<values.length;i++)
{
	メールを送信(values[i][2])
}

itemは各行を示し、item[2]はC列を示します。

「スプレッドシートの各行のC列に対し、メールを送信する処理を行う」という意味のプログラムです。

このように配列の各要素に対して処理を行う事ができるのがforEach関数です。

forEachは処理するだけ。mapは配列を返す

似た関数にmapがあります。

forEachとmapの違いは戻り値です。

map関数では配列が取得できますが、forEach関数は処理をするだけで、値は取得できません。

今回の例なら「メールを送信」したいのであって、「C列の値を取得」したいわけではありません。値を取得する必要がない時は、forEach関数の方が適切です。

//B列 = null
var values = [[1,2,3,4,5],[11,12,13,14,15],[21,22,23,24,25]]
var B列 = values.forEach(行 => 行[1])

//B列 = [2,12,22]
var values = [[1,2,3,4,5],[11,12,13,14,15],[21,22,23,24,25]]
var B列 = values.map(行 => 行[1])

配列の各要素を処理する時はforEach関数を使おう

for文でもforEach関数と同じ事はできますが、行数も変数も増えるので、ミスが起きやすくなります。forEach関数を使う事で楽にコードを書けるようになるでしょう。