立入|ITブログ
【GAS】filter関数 | 二次元配列にフィルタをかける

 

filter関数でスプレッドシートから特定の列を取得する

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

A B C D E
1 1 2 3 4 5
2 11 12 13 14 15
3 21 22 23 24 25

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

[[1,2,3,4,5],[11,12,13,14,15],[21,22,23,24,25]]

ではこの二次元配列から「A列が10以上の行」を取得するにはどうすればいいでしょうか?

こういう時に便利なのがfilter関数です。

filter関数は配列の中の条件に一致する要素を抜き出す時に使える

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

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

各行のうち、「行[0]=A列」が10以上のものを抜き出しています。

二次元配列の中から、条件に合う行だけを抜き出したい時に使えます。

filter関数はmap関数やforEach関数との組み合わせで力を発揮する

filter関数は単体でも強力ですが、map関数やforEach関数との組み合わせで力を発揮します。

例えば下記のようなデータがあったとしましょう。

A B C D
1 部長 鈴木 一郎 suzuki1@gmail.com
2 課長 鈴木 二郎 suzuki2@gmail.com
3 なし 鈴木 三郎 suzuki3@gmail.com
4 なし 鈴木 四郎 suzuki4@gmail.com
5 なし 鈴木 五郎 suzuki5@gmail.com

ここから役職がない(A列がなし)人の名前だけを出力したい時は、下記のようにすれば実現できます。

//三郎、四郎、五郎が出力される
var values = [[部長,鈴木,一郎,suzuki1@gmail.com],[課長,鈴木,二郎,suzuki2@gmail.com],[なし,鈴木,三郎,suzuki3@gmail.com],[なし,鈴木,四郎,suzuki4@gmail.com],[なし,鈴木,五郎,suzuki5@gmail.com]]
values.filter(行 => 行[0] == "なし").forEach(行 => Logger.log(行[2]))

filter関数で、A列が「なし」の行だけを取得します。その上で各行のC列を出力しています。同じ要領で課長だけにメールを送るようなプログラムも作ったりもできます。

filter関数はスプレッドシートのデータ処理に欠かせない

多くの場合、元となるスプレッドシートのデータは、全ての情報が一箇所にまとまった一覧表のような形になるでしょう。バラバラのデータをくっつけるより、まとまったデータを絞り込む方が楽だからです。

その意味でfilter関数はスプレッドシートのデータ処理に欠かせない関数かもしれません。