ADVERTISEMENT

【Googleスプレッドシート】LAMBDA関数とMAP関数を組み合わせて配列を変換!可読性向上のコツ

【Googleスプレッドシート】LAMBDA関数とMAP関数を組み合わせて配列を変換!可読性向上のコツ
🛡️ 超解決

LAMBDA関数とMAP関数を組み合わせると、複雑な配列処理を簡潔に記述できます。しかし、構文に慣れていないと可読性が低くなりがちです。この記事では、LAMBDAとMAPの基本的な使い方から、読みやすい数式を書くための具体的なコツまでを解説します。これを読めば、配列変換がスッキリと書けるようになります。

【要点】LAMBDA+MAPで配列を変換する3つのポイント

  • 基本構文 =MAP(配列, LAMBDA(名前, 式)): MAP関数が配列の各要素をLAMBDAに渡し、LAMBDA内で変換処理を定義します。
  • 引数名を意味のある単語にする: x, y ではなく value, price などと命名すると、処理内容が直感的に理解できます。
  • 複数の配列を同時に処理できる: MAPの引数に複数の配列を指定し、LAMBDAで複数引数を受け取れば、合計や比較などの計算が簡単です。

ADVERTISEMENT

LAMBDAとMAPの組み合わせで何ができるか

LAMBDA関数は、その場で名前のない関数(無名関数)を定義するための関数です。MAP関数は、1つまたは複数の配列の各要素に対してLAMBDAを適用し、結果の配列を返します。これらを組み合わせることで、従来のARRAYFORMULAやIF文のネストよりも可読性の高い数式を書くことができます。特に、複数の列を参照しながら個別の計算をする場合や、条件に応じて変換する処理で威力を発揮します。

この組み合わせを使う前提条件として、Googleスプレッドシートの最新バージョンである必要があります。LAMBDA関数は2022年に追加された比較的新しい関数です。また、処理する配列は同じ行数または列数である必要があります。

LAMBDA+MAPの基本構文と実践手順

基本的な書き方(数値の変換)

  1. 単一配列を2倍にする
    セルA1:A10に数値がある場合、=MAP(A1:A10, LAMBDA(value, value*2)) と入力します。valueが各セルの値に置き換わり、2倍した配列が返ります。
  2. 大文字に変換する
    文字列のリストがB1:B5にある場合、=MAP(B1:B5, LAMBDA(name, UPPER(name))) で全て大文字に変換します。
  3. 条件による変換
    =MAP(A1:A10, LAMBDA(num, IF(num>10, “大きい”, “小さい”))) のように、LAMBDA内でIFを使って条件分岐も記述できます。

複数の配列を同時に処理する

  1. 2つの列の値を合計する
    数量がC1:C10、単価がD1:D10にある場合、=MAP(C1:C10, D1:D10, LAMBDA(qty, price, qty*price)) で各行の金額を計算できます。
  2. 日付と時間の結合
    日付列E、時刻列Fがある場合、=MAP(E1:E10, F1:F10, LAMBDA(date, time, date+time)) で日時を結合します。
  3. 最大3つまで引数可能
    実際にはさらに多くの引数も可能ですが、可読性を保つためには3つまでに抑えることをおすすめします。

可読性を向上させるコツ

  1. 引数名を具体的にする
    LAMBDA(x, x*2) ではなく、LAMBDA(value, value*2) と書くだけで、何を処理しているか明確になります。複数の引数では、amount, rate, period など用途に合った名前を付けましょう。
  2. LAMBDAの式を複数行に分割する
    スプレッドシートの数式バーでは改行が可能です。複雑な式は Alt + Enter で折り返すと読みやすくなります。例えば、=MAP(A1:A10, LAMBDA(value, IF(value>100, “高額”, IF(value>50, “中額”, “低額”)))) を改行で整理します。
  3. カスタム関数として名前付き関数を利用する
    よく使う変換は「名前付き関数」に登録すると、数式が短くなり保守性が向上します。データメニュー → 名前付き関数 から定義できます。例えば、”DOUBLE” という名前で =LAMBDA(value, value*2) を登録し、=DOUBLE(A1:A10) のように使えます。

LAMBDA+MAPでよくある注意点と失敗例

配列のサイズが一致しない場合のエラー

MAP関数に渡す配列同士の行数・列数が一致しないとエラーになります。例えば、範囲 A1:A10 と B1:B5 を指定するとエラーです。サイズを揃えるために、配列の末尾に空白を追加するなどの対策が必要です。

LAMBDA内で範囲参照が循環してしまう

LAMBDAの中で自分自身の範囲を参照すると循環参照エラーが発生します。例えば、=MAP(A1:A10, LAMBDA(val, AVERAGE(A1:A10))) のように、全体平均を各セルに表示しようとすると循環します。別の列やセルを使って事前計算する必要があります。

パフォーマンスの低下

非常に大きな配列(数千行以上)に対してLAMBDA+MAPを使うと、計算が重くなる場合があります。その場合はQUERY関数やピボットテーブルなど別の方法も検討しましょう。ただし、数百行程度では問題ないことが多いです。

ADVERTISEMENT

LAMBDA+MAPと従来の手法の比較

比較項目 LAMBDA+MAP ARRAYFORMULA+IF QUERY関数
可読性 高い(引数名を工夫すれば自然言語に近い) 低い(括弧のネストが深くなりがち) 中程度(SQL-likeだが非エンジニアには難しい)
複雑な条件分岐 得意(ネストしても見やすい) 可読性が急激に低下 CASE式で対応可能だが限定的
複数配列の処理 直感的(引数を増やすだけ) できない(別途SUMPRODUCTなどが必要) JOINやサブクエリが必要
パフォーマンス 中程度(数万行でやや重い) 高速 高速(データベースエンジン上で動作)

まとめ

LAMBDA関数とMAP関数を組み合わせると、配列変換の数式が読みやすくなります。引数名を工夫し、適宜改行を入れることで、複雑な処理も理解しやすい形にまとめられます。大きなデータではQUERYなどの代替も検討しつつ、まずは小さな範囲で試してみてください。名前付き関数機能を活用すれば、さらに再利用性が高まります。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。