【Googleスプレッドシート】LAMBDAヘルパー関数を完全マスター!繰り返し作業の自動化で業務を劇的に効率化

基本解説

「Googleスプレッドシートで、同じような計算をたくさんの行にコピー&ペーストしている…」
「ARRAYFORMULA関数では、条件に合う最大値(MAXとFILTERの組み合わせ)を出すのが難しい…」
「数式が長すぎて、もはや自分でも解読できない…」

日々の業務でスプレッドシートを使っていると、このような課題に直面することはないでしょうか。単純作業の繰り返しは時間がかかるだけでなく、コピーミスや修正漏れといったヒューマンエラーの温床にもなりかねません。

実は、これらの課題の多くは、LAMBDA(ラムダ)関数と、その仲間であるLAMBDAヘルパー関数を使いこなすことで、スマートに解決できます。

少し専門的に聞こえるかもしれませんが、一度使い方を覚えてしまえば、あなたのスプレッドシート業務を劇的に効率化してくれる、まさに「魔法」のような機能です。

この記事では、スプレッドシートの基本的な関数に触れたことがある方を対象に、LAMBDA関数の基本的な仕組みから、実際の業務で使える6つのヘルパー関数の具体的な活用事例まで、画像を交えながら分かりやすく解説します。

この記事を読み終える頃には、複雑な繰り返し作業をシンプルで美しい数式にまとめあげ、業務の自動化と属人化の解消に向けた大きな一歩を踏み出せるようになっているはずです。

LAMBDA関数とは?「自分だけの計算ルール」を作る魔法

LAMBDAヘルパー関数を理解する上で、まず欠かせないのがLAMBDA(ラムダ)関数そのものです。

LAMBDA関数とは、一言でいうと「その場で計算ルールを定義して使える即席関数」を作成する機能です。

SUMやIFのような、サポートされている決まった名前を持つ関数とは異なり、LAMBDAはオリジナルの計算ルールを、その場で自由に作ることができます。

LAMBDA関数の基本的な構文

LAMBDA関数の基本的な形は非常にシンプルです。

LAMBDA(名前, 数式)
引数説明
名前計算に使う値に付ける、その場限りの名前です。自分で自由に設定できます(例:price, x)
数式上記の名前を使って、具体的な計算式や処理内容を記述します。

例えば、「受け取った数値を1.1倍する」という計算ルールは、以下のように表現できます。

LAMBDA(price, price * 1.1)

これは、「priceという名前で数値を受け取り、そのpriceを1.1倍する」というルールを定義しています。

ただし、LAMBDA関数は単体では機能しません。この「即席の計算ルール」を、どのデータに適用するかを指定してくれる「ヘルパー関数」と組み合わせることで、初めてその真価を発揮するのです。

LAMBDAヘルパー関数とは?強力な6つの仲間たち

LAMBDAヘルパー関数とは、LAMBDA関数とセットで使うことで、配列(セルの範囲)に対する処理を簡単に行えるようにする関数群のことです。

これまではARRAYFORMULA関数が配列処理の主役でしたが、FILTERような集計を含む関数を各行に適用するなど、一部の複雑な処理には対応しきれない場面もありました。LAMBDAヘルパー関数はその壁を越え、より高度で柔軟な自動化を実現します。

現在、以下の6つのヘルパー関数が用意されています。

関数名主な役割
MAP配列の各要素に同じ処理を適用し、新しい配列を返す。
REDUCE配列を順に処理し、最終的な1つの結果にまとめる(集計する)。
SCAN配列を順に処理し、各ステップの途中結果をすべて配列で返す。
BYROW配列を行単位で処理し、各行の結果を返す。
BYCOL配列を列単位で処理し、各列の結果を返す。
MAKEARRAY指定した行数と列数で、計算結果に基づいた配列を新規作成する。

次の章から、具体的な使い方を一つずつ見ていきましょう。

【実践】LAMBDAヘルパー関数の使い方

ここでは、法人業務でよくあるシーンを例に、各ヘルパー関数の使い方を解説します。

1. MAP関数:各データに複雑な処理を適用する

MAP関数は、配列の一つひとつの要素に対して、LAMBDAで定義した同じ処理を適用します。

基本的な構文

=MAP(配列1, [配列2, ...], LAMBDA)
  • 配列1: 処理を適用したいセル範囲。
  • [配列2, …]: (任意) 計算に使う2つ目以降のセル範囲。
  • LAMBDA: 各要素に適用する計算ルール。

ARRAYFORMULA関数との違いは?

ARRAYFORMULAは便利な関数ですが、FILTERやMAXのような、配列を都度集計・絞り込みする関数を、参照元の各行に対して個別に実行することはできません。MAP関数は、各要素に対して個別にLAMBDA式を実行できるため、はるかに高度な処理が可能です。

※ARRAYFORMULA関数についての詳しい解説は、こちらの記事をご覧ください。

【実践】従業員リストに、各従業員の最終研修日を表示する

従業員リストシートに、研修履歴シートから一番最近の研修日を表示します。

MAP関数表示用の表データ
従業員の名前が記載されたリスト
MAP関数計算用の研修履歴
従業員名と研修日が記載されたリスト

この場合、従業員リストのB2セルに以下の数式を入力します。

=MAP(
  A2:A4,
  LAMBDA(
    employee_name,
    MAX(FILTER(研修履歴!B:B, 研修履歴!A:A = employee_name))
  )
)
MAP計算結果
その従業員の最終研修日が表示できている

2. REDUCE関数:配列を処理して、最終的な単一の結果を得る

REDUCE関数は、初期値に対して配列の要素を一つずつ順番に適用し、最終的な一つの結果を返します。

基本的な構文

=REDUCE(初期値, 配列, LAMBDA)
  • 初期値: 計算を開始する最初の値。
  • 配列: 処理対象のセル範囲。
  • LAMBDA: 現在の集計値現在の要素の2つの名前を使って計算ルールを定義。

【実践】定価に対して、複数の割引キャンペーンを適用した最終価格を計算する

B1セルに定価、B2:B3に割引リスト(0.9は10%オフ、-500は500円引き)があるとします。

REDUCE関数計算用の表

最終価格を計算したいセルに、以下の数式を入力します。

=REDUCE(
  B1,
  B2:B3,
  LAMBDA(
    current_price,
    discount,
    IF(discount > 0, current_price * discount, current_price + discount)
  )
)
  • REDUCEは初期値B1(10,000)からスタートします。
  • 最初にB2の0.9を適用し、10000 * 0.9 = 9000となります。
  • 次に、その結果9000に対してB3の-500を適用し、9000 – 500 = 8500が最終結果として返されます。
REDUVCE関数の結果を表示している
割引後の金額が表示できている

3. SCAN関数:途中経過をすべて記録する(累計計算)

SCAN関数は、REDUCEと似ていますが、最終結果だけでなく各段階での計算結果をすべて表示します。「売上の累計」や「在庫の推移」の計算に最適です。

基本的な構文

=SCAN(初期値, 配列, LAMBDA)
  • 初期値: 計算を開始する最初の値。
  • 配列: 処理対象のセル範囲。
  • LAMBDA: 現在の集計値現在の要素の2つの名前を使って計算ルールを定義。

【実践】日々の売上データから、売上累計を計算する

以下のように日々の売上がリスト化され、C列にその日までの売上を表示したいとします。

SCAN関数計算用の表データ

C2セルに以下の数式を入力します。

=SCAN(
  0,
  B2:B4,
  LAMBDA(
    accumulator,
    current_value,
    accumulator + current_value
  )
)
SCAN関数計算結果
その日までの合計売上が表示できている

4. BYROW / BYCOL関数:行ごと・列ごとに集計する

BYROW関数は範囲を一行ずつ、BYCOL関数は一列ずつ処理します。「担当者ごとの合計(行処理)」や「月ごとの合計(列処理)」に便利です。

基本的な構文

=BYROW(配列, LAMBDA)
=BYCOL(配列, LAMBDA)
  • 配列: 処理対象のセル範囲。
  • LAMBDA: BYROWの場合はBYCOLの場合はを一つの名前で受け取り、計算ルールを定義。

【実践】担当者ごとの四半期合計と、月ごとの全社合計を計算する

以下のように担当者ごとの売上を記載した表に、四半期合計と、月ごとの全社合計を計算します。

BYROW、BYCOL計算用の表データ

行ごとの合計(担当者別合計)をE2セルに入力:

=BYROW(B2:D4, LAMBDA(row, SUM(row)))
BYROW関数計算結果
BYROWでその行の値が合計できている

列ごとの合計(月別合計)をB5セルに入力:

=BYCOL(B2:D4, LAMBDA(col, SUM(col)))
BYCOL関数計算結果
BYCOLでその列の合計が計算できている

5. MAKEARRAY関数:指定したサイズの表を動的に作成する

MAKEARRAY関数は、指定した行数と列数で、LAMBDAの計算ルールに基づいた表(配列)をゼロから作成します。

基本的な構文

=MAKEARRAY(行数, 列数, LAMBDA)
  • 行数: 作成する表の行数。
  • 列数: 作成する表の列数。
  • LAMBDA: 行インデックス列インデックスの2つの名前を使って、各セルに表示する値を計算。

【実践】九九の表(9×9)を自動で生成する

A1セルに以下の数式を入力するだけで、瞬時に9×9の九九の表が作成されます。

=MAKEARRAY(
  9,
  9,
  LAMBDA(
    row_index,
    column_index,
    row_index * column_index
  )
)
MAKEARRAY関数の結果
九九の一覧表が表示できている

【応用】LAMBDAを「名前付き関数」として登録し、いつでも呼び出す

LAMBDA関数のもう一つの強力な機能が「名前付き関数」です。

複雑な計算ルールをLAMBDAで作成したら、それに名前を付けて保存できます。一度登録すれば、今後は=最終研修日検索(A2)のように、まるでスプレッドシートに元からある関数のように手軽に呼び出せます。

名前付き関数の登録方法

  1. メニューの「データ」>「名前付き関数」を選択。
  2. 「新しい関数を追加」をクリックし、関数名や計算ルール(LAMBDA式)を登録します。
名前付き関数の位置

これにより、複雑な計算処理を一度登録するだけで、誰でも簡単に、間違いなく再利用できるようになり、シートの属人化を強力に防ぎます。

まとめ

今回は、GoogleスプレッドシートのLAMBDA関数と、その能力を最大限に引き出すヘルパー関数について解説しました。

  • LAMBDA関数は、オリジナルの「計算ルール」をその場で定義する機能。
  • LAMBDAヘルパー関数と組み合わせることで、ARRAYFORMULAでは難しかった高度な配列操作を自動化できる。
  • MAP: 配列の全要素にFILTERのような複雑な処理をしたいときに。
  • REDUCE: 複数の処理を順に適用し、最終的な一つの結果が欲しいときに。
  • SCAN: 累計や推移など、途中経過をすべて記録したいときに。
  • BYROW/BYCOL: 行ごとや列ごとに集計したいときに。
  • MAKEARRAY: 計算ルールに基づいて表を動的に生成したいときに。
  • 名前付き関数に登録すれば、自作した処理をいつでも簡単に再利用できる。

ARRAYFORMULAの限界を超え、スプレッドシートの可能性を大きく広げるLAMBDAの世界。まずは簡単な処理から、ぜひご自身の業務に取り入れてみてください。

単純なコピー&ペースト作業や、解読不能な長い数式から解放されれば、あなたの業務はもっと速く、正確に、そして創造的になるはずです。

※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。