概要
「この判定ロジック、あちこちのシートで何回もコピペしてる…」
「同じような条件式を列ごとに微妙に変えて書いていて、修正が地獄…」
そういう「何度も使う条件式」を 自作関数として再利用できるようにする仕組み が
LAMBDA 関数です。
LAMBDA を使うと、
「自分専用の IF や IFS みたいな関数」を Excel の中に作れます。
一度作っておけば、普通の関数と同じように =評価関数(A2) などと呼び出せるようになります。
ここでは「条件式を再利用する」という視点に絞って、
LAMBDA を初心者向けにかみ砕いて解説します。
LAMBDA の基本イメージ
LAMBDA の書式
LAMBDA の基本形は次のとおりです。
=LAMBDA(引数1, 引数2, …, 計算式)
ポイントは 2 つだけです。
- 引数
関数に渡す「入力」です(セル参照ではなく“名前”)。
例:点数、売上、数量など。 - 計算式
引数を使って書く「中身の式」です。
例:IF や IFS、LOOKUP など、ふだん書いている式そのもの。
LAMBDA 単体だと
=LAMBDA(x, x*2)
のように書けますが、
これを直接セルに置いても「関数として定義しただけ」で何も返しません。
セルの中で「すぐ試す」ときは、
最後にその場で引数を渡してあげます。
=LAMBDA(x, x*2)(5) ' → 10
「関数を定義して、その場で (5) を入れて実行している」というイメージです。
条件式を LAMBDA 化する基本パターン
例1:3段階評価ロジックを関数化する
よくある「点数で 3 段階評価」のロジックを、
ひとまず普通の IFS で書いてみます。
=IFS(
A2>=80, "A",
A2>=60, "B",
TRUE, "C"
)
これを LAMBDA で「評価関数」にします。
=LAMBDA(点数,
IFS(
点数>=80, "A",
点数>=60, "B",
TRUE, "C"
)
)
セル上で試すときは、最後に引数をつけます。
=LAMBDA(点数,
IFS(
点数>=80, "A",
点数>=60, "B",
TRUE, "C"
)
)(A2)
A2 の点数に応じて A/B/C を返します。
この形を「名前の定義」に登録して
(例えば「成績ランク」という名前にする)、
- 数式タブ → 名前の管理 → 新規作成
- 名前:成績ランク
- 参照範囲:
=LAMBDA(点数, IFS(点数>=80,"A",点数>=60,"B",TRUE,"C"))
と設定すると、以降はどこでもこう書けます。
=成績ランク(A2)
これで「3段階評価」という条件式を、自分専用の関数として再利用できるようになります。
よく使う条件チェックを LAMBDA にする
例2:売上と利益の「優良判定」を関数化
前提:
B列:売上
C列:利益
条件:
売上 100,000 以上 かつ 利益 10,000 以上 → 「優良」
それ以外 → 「対象外」
通常の IF だとこうです。
=IF(AND(B2>=100000, C2>=10000), "優良", "対象外")
これを LAMBDA で「優良判定関数」にします。
まずは LAMBDA として書き換えます。
=LAMBDA(売上, 利益,
IF(AND(売上>=100000, 利益>=10000), "優良", "対象外")
)
セルで試すなら、こう。
=LAMBDA(売上, 利益,
IF(AND(売上>=100000, 利益>=10000), "優良", "対象外")
)(B2, C2)
これを「名前の定義」で「優良判定」という名前に登録すると、
=優良判定(B2, C2)
だけで呼び出せるようになります。
他のシートでも、
他の列配置でも、引数さえ渡せば同じロジックを再利用できます。
フラグ付けロジックを LAMBDA にまとめる
例3:「期限切れかつ未処理」を一発判定する関数
前提:
A列:期限日
B列:ステータス(”未処理” / “処理中” / “完了”)
条件:
A2 が今日より前 かつ B2 が「未処理」なら TRUE(要対応)
それ以外は FALSE
普通の式ならこうです。
=AND(A2<TODAY(), B2="未処理")
これを LAMBDA 化します。
=LAMBDA(期限日, ステータス,
AND(期限日<TODAY(), ステータス="未処理")
)
セルで試すなら、こう。
=LAMBDA(期限日, ステータス,
AND(期限日<TODAY(), ステータス="未処理")
)(A2, B2)
名前「要対応フラグ」として登録すれば、
=要対応フラグ(A2, B2)
と書くだけで TRUE / FALSE が返ります。
その TRUE / FALSE を IF でラベルにしても良いですし、
条件付き書式の条件としてそのまま使うこともできます。
LAMBDA を名前定義して「自作関数」にする流れ
手順をざっくり
- まずセルで普通の式を完成させる
例:=IFS(A2>=80,"A",A2>=60,"B",TRUE,"C") - その式の「変わる部分(A2など)」を引数に置き換え、LAMBDA をくっつける
例:=LAMBDA(点数, IFS(点数>=80,"A",点数>=60,"B",TRUE,"C")) - セルの中で試すときは最後に (A2) を付けて動作確認
=LAMBDA(点数, IFS(点数>=80,"A",点数>=60,"B",TRUE,"C"))(A2) - OK なら式の本体部分
=LAMBDA(点数, IFS(点数>=80,"A",点数>=60,"B",TRUE,"C"))
をコピーして、 数式タブ → 名前の管理 → 新規 →
名前:好きな関数名
参照範囲:上の LAMBDA 式を貼り付け - 以後、セルで
=関数名(A2)のように呼び出せる
この流れさえ一度体験すれば、「再利用できる条件式」が一気に増えます。
注意点とコツ
引数名は「意味が分かる日本語」が圧倒的におすすめ
悪い例:
=LAMBDA(a, b, c, …)
これだと数か月後の自分も他人も意味がわかりません。
良い例:
=LAMBDA(点数, 売上, 利益率, …)
中の式を書いたり読むときに、
「これは何の値か」が一瞬で分かります。
まずは「一度決めた評価ルール」を関数化する
毎回コピペしているような条件式
(成績判定、ランク付け、優良顧客判定、要対応フラグなど)
を 1 つ選んで LAMBDA 化するところから始めると、
メリットをすぐに体感できます。
例題
問題1
A2 に点数が入っています。
80以上→「A」、60以上→「B」、それ以外→「C」
という評価をする関数を LAMBDA で作りたいとします。
点数 を引数とし、この評価を行う LAMBDA 式(セルで A2 を評価するところまで)を書いてください。
=LAMBDA(点数,
IFS(
点数>=80, "A",
点数>=60, "B",
TRUE, "C"
)
)(A2)
問題2
B2 に売上、C2 に利益が入っています。
売上が 100,000 以上 かつ 利益が 10,000 以上なら「優良」、
それ以外は「対象外」を返す関数を作りたいとします。
売上・利益 を引数とする LAMBDA 式(セルで B2,C2 を評価するところまで)を書いてください。
=LAMBDA(売上, 利益,
IF(AND(売上>=100000, 利益>=10000), "優良", "対象外")
)(B2, C2)
問題3
A2 に期限日、B2 にステータス(”未処理” / “処理中” / “完了”)が入っています。
「期限日が今日より前」かつ「ステータスが未処理」のとき TRUE、
それ以外 FALSE を返すフラグ関数を作りたいとします。
期限日・ステータス を引数とする LAMBDA 式(セルで A2,B2 を評価するところまで)を書いてください。
=LAMBDA(期限日, ステータス,
AND(期限日<TODAY(), ステータス="未処理")
)(A2, B2)
問題4
B2 に数量、C2 に単価が入っています。
数量>0 かつ 単価>0 のときだけ 金額(数量×単価)を返し、
それ以外は空白を返す関数を作りたいとします。
数量・単価 を引数とする LAMBDA 式(セルで B2,C2 を評価するところまで)を書いてください。
=LAMBDA(数量, 単価,
IF(AND(数量>0, 単価>0), 数量*単価, "")
)(B2, C2)
問題5
A2 に点数が入っています。
90以上→「S」、70以上→「A」、50以上→「B」、それ以外→「C」
という4段階評価を行う自作関数を LAMBDA で作りたいとします。
点数 を引数とする LAMBDA 式(セルで A2 を評価するところまで)を書いてください。
=LAMBDA(点数,
IFS(
点数>=90, "S",
点数>=70, "A",
点数>=50, "B",
TRUE, "C"
)
)(A2)
まとめ
LAMBDA は、条件式を「一度作ったら何度でも呼べる自作関数」に変えてくれる仕組みです。
- まず普通に条件式(IF / IFS など)を書いて動かす
- 変わる値の部分を引数にし、LAMBDA で包む
- 名前定義に登録して、自作関数として再利用する
この 3 ステップだけで、
- コピペ地獄から抜け出せる
- 修正は「LAMBDA 1 箇所」だけで済む
- 数式に「意味のある名前」がついて読みやすくなる
という恩恵が得られます。
「これはうちの会社の“お約束ロジック”だな」と思う条件式がひとつでもあるなら、
それを LAMBDA で関数化するところから、ぜひ試してみてください。
