下記のようなスプレッドシートがあったとします。
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関数では下記のような事が可能です。
//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関数です。
似た関数に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])
for文でもforEach関数と同じ事はできますが、行数も変数も増えるので、ミスが起きやすくなります。forEach関数を使う事で楽にコードを書けるようになるでしょう。