はじめに
Googleスプレッドシートでデータを扱う際、列内の重複を確認したいケースはよくあります。
従来は COUNTIF
関数を行ごとにコピーして対応するのが一般的でしたが、
MAP
関数と LAMBDA
関数を併用することで、数式を1行にまとめて処理できるようになりました。
この記事では、
- 従来の重複判定の方法
-
MAP
とLAMBDA
を使った簡潔な書き方 - サンプルデータと表示例
をまとめます。
サンプルデータ
下記の表を例に、B列の名前データの重複回数を求めます。
重複のあるデータを意図的に含めています。
No | 名前 |
---|---|
1 | 佐藤 |
2 | 鈴木 |
3 | 高橋 |
4 | 佐藤 |
5 | 田中 |
6 | 高橋 |
7 | 伊藤 |
8 | 渡辺 |
9 | 佐々木 |
10 | 山本 |
11 | 田中 |
12 | 佐藤 |
13 | 加藤 |
14 | 中村 |
15 | 小林 |
16 | 吉田 |
17 | 佐藤 |
18 | 高橋 |
19 | 渡辺 |
20 | 伊藤 |
従来の方法:COUNTIFを1行ずつコピー
従来はC列に以下の式を記載し、行ごとにコピーしていました。
=COUNTIF($B$2:$B, B2)
- B列全体を検索範囲として指定
- 対象セルの値をカウント
- 数式を必要な行までコピー
この方法でも目的は達成できますが、
データ件数が増えると数式の数も増え、計算負荷が高くなりやすいのが課題です。
新しい方法:MAP×LAMBDAで一括処理
次のように MAP
と LAMBDA
を組み合わせることで、
同じ処理を1つの式で書けます。
=MAP($B$2:$B, LAMBDA(val, COUNTIF($B$2:$B, val)))
処理の流れ
-
MAP
:範囲内の各要素に対して処理を実行 -
LAMBDA(val, ...)
:val
に各要素を受け取り、指定した処理を返す -
COUNTIF($B$2:$B, val)
:対象値の出現回数を算出
これにより、B列の各値に対するカウントを一括で計算できます。
実際の表示例
結果は以下のように表示されます。
No | 名前 | 重複数 |
---|---|---|
1 | 佐藤 | 4 |
2 | 鈴木 | 1 |
3 | 高橋 | 3 |
4 | 佐藤 | 4 |
5 | 田中 | 2 |
6 | 高橋 | 3 |
7 | 伊藤 | 2 |
8 | 渡辺 | 2 |
9 | 佐々木 | 1 |
10 | 山本 | 1 |
11 | 田中 | 2 |
12 | 佐藤 | 4 |
13 | 加藤 | 1 |
14 | 中村 | 1 |
15 | 小林 | 1 |
16 | 吉田 | 1 |
17 | 佐藤 | 4 |
18 | 高橋 | 3 |
19 | 渡辺 | 2 |
20 | 伊藤 | 2 |
1つの数式に処理を集約できるため、
シート全体の見通しが良くなり、関数管理も容易になります。
まとめ
-
MAP
とLAMBDA
を使えば、繰り返し処理を1つの数式にまとめられる - 行数が多いシートでも計算負荷を抑えやすい
- 数式の複製を減らせるため、管理性が向上
Googleスプレッドシートの新しい関数を活用することで、
複雑な処理をシンプルに記述できるようになります。
データ件数が多いスプレッドシートほど効果が大きい手法です。