「この計算、毎回同じ数式を組み直すのが面倒…」。スプレッドシートで複雑な数式を何度もコピペしていませんか。
数式が長くなるほど読みにくくなりますし、修正するときは使っている場所をすべて直す必要があります。
そんな悩みを解決するのが LAMBDA関数 です。よく使う計算ロジックに名前を付けて、自作の関数として使い回せるようになります。
この記事では、LAMBDA関数の基本構文から名前付き関数への登録、MAP・REDUCEとの連携まで実例付きで紹介します。
LAMBDA関数とは? ── 自作関数を数式だけで作れる
LAMBDA関数(読み方: らむだ)は、独自の計算ロジックを関数として定義できる関数です。
名前はプログラミング用語の「ラムダ式(無名関数)」からきています。
たとえば「税込価格を計算する関数」や「姓と名をつなげてフルネーム表示する関数」など、よく使う処理をひとまとめにできます。
LAMBDA関数にできることをまとめると、次のとおりです。
- 繰り返し使う計算ロジックを1つの関数にまとめる
- 「名前付き関数」として登録すれば、SUM関数やIF関数と同じように呼び出せる
- MAP・REDUCE・BYROWなどと組み合わせて高度な配列処理ができる
- GAS(Google Apps Script)を使わずに自作関数を作れる
NOTE
LAMBDA関数はGoogleスプレッドシートの全アカウントで使えます。ExcelにもLAMBDA関数はありますが、Sheetsの「名前付き関数」との連携は独自機能です。
LAMBDA関数の書き方(構文と引数)
基本構文
=LAMBDA(引数名1, [引数名2, ...], 数式本体)(値1, [値2, ...])
LAMBDA関数は2つのパートに分かれています。定義部分の LAMBDA(...) と、値を渡す (値) です。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 引数名1 | 必須 | 数式本体で使う変数の名前(好きな名前を付けられる) |
| 引数名2〜 | 任意 | 2つ目以降の引数。最大で253個まで |
| 数式本体 | 必須 | 引数名を使った計算式。最後の引数が数式本体になる |
| (値1, 値2, …) | 必須 | 定義した引数に渡す実際の値やセル参照 |
引数名はセル参照(A1やB2)以外なら自由に名前を付けられます。price や x など、わかりやすい名前にしておくと読みやすくなりますよ。
TIP
LAMBDA関数の最後の引数が必ず「数式本体」になります。引数が1つなら
LAMBDA(x, x1.1)のように、xが引数名でx1.1が数式本体です。
LAMBDA関数の基本的な使い方
まずはシンプルな例で動きを確認してみましょう。
税込価格を計算する
税抜き価格から税込価格を計算するLAMBDA関数です。
=LAMBDA(price, price*1.1)(A2)
price という引数名を定義し、price*1.1 で10%の消費税を加算しています。最後の (A2) でA2セルの値を渡しています。
A2に「1000」が入っていれば、結果は「1100」です。
2つの引数を使う
姓と名をスペースでつなげてフルネーム表示する例です。
=LAMBDA(sei, mei, sei&" "&mei)(A2, B2)
A2に「田中」、B2に「太郎」が入っていれば「田中 太郎」を返します。
セル内で単体テストする
LAMBDA関数はセルに直接書いてテストできます。
| 数式 | 結果 | 説明 |
|---|---|---|
=LAMBDA(x, x*2)(5) | 10 | 5を2倍 |
=LAMBDA(x, y, x+y)(3, 7) | 10 | 3+7 |
=LAMBDA(x, IF(x>=60,"合格","不合格"))(75) | 合格 | 条件分岐 |
=LAMBDA(txt, UPPER(txt))("hello") | HELLO | 文字列変換 |
セル内で動作を確認してから名前付き関数に登録する、という流れがおすすめです。
名前付き関数として登録する方法(Sheets独自機能)
LAMBDA関数の真価は「名前付き関数」として登録したときに発揮されます。登録すれば、SUM関数やVLOOKUP関数と同じように、どのセルからでも呼び出せるようになります。
登録手順
- メニューから「データ」→「名前付き関数」を選択します
- 「新しい関数を追加」をクリックします
- 以下の項目を入力します
- 関数名:
TAX_INCL(半角英字・アンダースコアのみ) - 数式の定義:
=LAMBDA(price, ROUND(price*1.1)) - 引数のプレースホルダ:
price - 引数の説明: 「税抜き価格」
- 関数の説明: 「税抜き価格から税込価格を計算します」
- 「次へ」→「作成」をクリックします
登録が完了すると、どのセルでも次のように呼び出せます。
=TAX_INCL(A2)
数式バーに =TAX と入力すると、オートコンプリートに表示されるので便利ですよ。
名前付き関数のメリット
- 可読性:
=LAMBDA(p, ROUND(p*1.1))(A2)より=TAX_INCL(A2)のほうがわかりやすい - メンテナンス性: 税率が変わっても定義を1か所直すだけ
- 共有: 同じスプレッドシートを使うメンバー全員が同じ関数を使える
- オートコンプリート: 入力補完と引数の説明が表示される
TIP
名前付き関数はスプレッドシートファイルごとに保存されます。別のファイルで使いたい場合は、テンプレートシートを複製するか、同じ定義を再登録してください。
LAMBDA関数の実践的な使い方・応用例
MAP関数と組み合わせて配列を一括変換する
MAP関数を使えば、配列の各値にLAMBDA関数を適用できます。
=MAP(A2:A10, LAMBDA(price, ROUND(price*1.1)))
A2:A10の全セルに対して税込計算を一括で適用します。結果は配列として返されるので、1つのセルに数式を入れるだけで複数行に結果が展開されます。
REDUCE関数と組み合わせて集約する
REDUCE関数は配列を1つの値にまとめる関数です。LAMBDAで集約ロジックを定義します。
=REDUCE(0, A2:A10, LAMBDA(acc, val, acc + val))
この例はSUM関数と同じ動作ですが、LAMBDAの中身を変えれば条件付き合計なども自由に作れます。
=REDUCE(0, A2:A10, LAMBDA(acc, val, IF(val>=1000, acc+val, acc)))
1,000以上の値だけを合計する例です。SUMIFSでは書きにくい複雑な条件にも対応できますよ。
BYROW関数と組み合わせて行ごとに処理する
BYROW関数は各行に対してLAMBDAを適用します。
=BYROW(A2:C10, LAMBDA(row, MAX(row)-MIN(row)))
各行の最大値と最小値の差(レンジ)を一括で計算します。行単位の集計処理が1つの数式で完結します。
BYCOL関数と組み合わせて列ごとに処理する
BYCOL関数は列単位でLAMBDAを適用します。
=BYCOL(A2:D10, LAMBDA(col, AVERAGE(col)))
各列の平均値を一括で計算できます。
SCAN関数と組み合わせて累積計算する
SCAN関数はREDUCEと似ていますが、中間値をすべて配列で返します。
=SCAN(0, A2:A10, LAMBDA(acc, val, acc + val))
累計を行ごとに表示したいときに便利です。ランニングトータル(累積合計)を1つの数式で実現できます。
MAKEARRAY関数と組み合わせて配列を生成する
MAKEARRAY関数はLAMBDAで計算した結果から配列を生成します。
=MAKEARRAY(9, 9, LAMBDA(row, col, row*col))
9行9列の九九の表を1つの数式で作れます。
よくあるエラーと対処法
LAMBDA関数で「思った結果にならない」ケースをまとめました。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #NAME? エラー | 関数名のタイポ、または引数名にセル参照(A1等)を使っている | 引数名はセル参照以外の名前にする。x、val、price など |
| #N/A エラー | 定義した引数の数と渡した値の数が一致していない | 引数2つなら値も2つ渡す。LAMBDA(x,y, x+y)(1,2) |
| #VALUE! エラー | 数式本体の中で型が合わない演算をしている | 文字列に対して算術演算をしていないか確認する |
| #REF! エラー | 名前付き関数の定義で参照しているセルが削除された | 名前付き関数の定義を開いて参照先を修正する |
| 数式本体が実行されない | LAMBDA定義の後に (値) を付け忘れている | =LAMBDA(x, x2) ではなく =LAMBDA(x, x2)(A2) と書く |
| 引数名が反映されない | 引数名に予約語(SUM、IFなど)を使っている | 関数名と被らない名前にする |
TIP
LAMBDA関数の引数名に使えるのは、セル参照や既存の関数名と被らない文字列です。迷ったら
x、y、valのようなシンプルな名前が無難ですよ。
Excelとの違い(Excel LAMBDAとの比較)
ExcelにもLAMBDA関数がありますが、登録方法とヘルパー関数に違いがあります。
| 比較項目 | Googleスプレッドシート | Excel |
|---|---|---|
| LAMBDA関数の構文 | =LAMBDA(引数, 数式)(値) | =LAMBDA(引数, 数式)(値) |
| カスタム関数の登録方法 | 名前付き関数(メニューから登録) | 名前の管理(数式タブ → 名前の管理) |
| 登録時の引数説明 | 引数ごとに説明文を設定できる | 説明文の設定不可 |
| オートコンプリート | 対応(関数名を入力すると候補表示) | 非対応(名前の管理で定義した関数は候補に出ない) |
| 対応バージョン | 全アカウント | Microsoft 365 / Excel 2024 以降 |
| ヘルパー関数 | MAP, REDUCE, SCAN, BYROW, BYCOL, MAKEARRAY | MAP, REDUCE, SCAN, BYROW, BYCOL, MAKEARRAY |
構文自体は同じですが、カスタム関数の登録・管理のしやすさではSheetsが有利です。SheetsはメニューからGUIで登録でき、オートコンプリートにも対応しています。
Excelでは「数式」タブ →「名前の管理」→「新規作成」で名前を定義し、参照先にLAMBDA式を入力します。手順がやや複雑で、関数の説明文も付けられません。
ヘルパー関数(MAP、REDUCEなど)はどちらも同じものが使えます。
まとめ
LAMBDA関数は、繰り返し使う計算ロジックをカスタム関数として定義できる関数です。
ポイントを整理します。
- 構文は
=LAMBDA(引数名, 数式本体)(値)で、最後の引数が数式本体 - 名前付き関数に登録すると、SUM関数と同じように呼び出せる(Sheets独自機能)
- MAP・REDUCE・BYROW・BYCOL・SCAN・MAKEARRAYと組み合わせて配列処理が可能
- 引数名にはセル参照や関数名と被らない名前を使う
- Excelにも同じ構文のLAMBDA関数があるが、登録方法が異なる
- GAS(Google Apps Script)を使わずにカスタム関数を作れる
まずは =LAMBDA(x, x*2)(5) でLAMBDA関数の動きを確認するところから始めてみてください。
