Excel関数 逆引き集 | 判定式を関数化 → LAMBDA

Excel VBA Excel
スポンサーリンク

概要

「この判定式、あちこちのシートでコピペしてる…」
「似たような条件式を何度も書き直していて、修正のたびに全部直すのがつらい…」

そういう「よく使う判定ロジック」を、
自分専用の関数として“関数化”して再利用できるようにする仕組み
Excel の LAMBDA 関数です。

判定式を LAMBDA で包んで名前を付けると、
=成績判定(A2) のように、普通の関数と同じ感覚で何度でも呼び出せるようになります。

ここでは「判定式を関数化する」というテーマで、LAMBDA をかみ砕いて説明していきます。


LAMBDA の基本イメージ

LAMBDA の書式と動き

LAMBDA の基本形はこうです。

=LAMBDA(引数1, 引数2, …, 判定式や計算式)

考え方は、とてもシンプルです。

「こういう入力(引数)が来たら、
 この式(判定式)を実行して結果を返す
 “自作関数”を作る」

というイメージです。

ポイントは 3 つだけです。

1つ目は「引数(ひきすう)」
関数に渡す“入力の名前”です。
例:点数、売上、期限日、ステータス など。

2つ目は「中身の式」
ふだんセルに書いている IF / IFS / AND / OR などの判定式そのものです。
ここではセル番地ではなく、引数名を使って書きます。

3つ目は「呼び出し方」
セルで試すときは、
=LAMBDA(引数…, 判定式…)(実際の値…)
という形で、最後に () で引数を渡します。

この LAMBDA 式を「名前の定義」に登録すると、
=自分で決めた関数名(引数…) として何度でも再利用できるようになります。


シンプルな判定式を関数化する基本

点数の合否判定を関数化する

まずは、普通の IF の判定式からスタートします。

A2 に点数が入っているとして、
合格ライン 60 点以上なら「合格」、それ以外は「不合格」と判定する式はこうです。

=IF(A2>=60, "合格", "不合格")

これを LAMBDA で「判定式を関数化」すると、次のようになります。

=LAMBDA(点数,
  IF(点数>=60, "合格", "不合格")
)

セル上で A2 を評価してみたいなら、こう書きます。

=LAMBDA(点数,
  IF(点数>=60, "合格", "不合格")
)(A2)

A2 の点数に応じて、「合格」か「不合格」を返します。

この LAMBDA を「名前の定義」で
名前「合否判定」として登録すると、以降はどこでも

=合否判定(A2)

と書くだけで同じ判定式を呼び出せます。


3段階以上の判定式を関数化する

成績ランク(A/B/C/D)を関数化する

A2 の点数に応じて、

80点以上 → A
60〜79点 → B
40〜59点 → C
それ以外 → D

という判定式をまずは IFS で書きます。

=IFS(
  A2>=80, "A",
  A2>=60, "B",
  A2>=40, "C",
  TRUE,   "D"
)

これを「点数」を引数にした LAMBDA に変形します。

=LAMBDA(点数,
  IFS(
    点数>=80, "A",
    点数>=60, "B",
    点数>=40, "C",
    TRUE,     "D"
  )
)

セル上で A2 を判定するなら、末尾に (A2) をつけます。

=LAMBDA(点数,
  IFS(
    点数>=80, "A",
    点数>=60, "B",
    点数>=40, "C",
    TRUE,     "D"
  )
)(A2)

この式を「成績判定」という名前で定義しておくと、

=成績判定(A2)

と書くだけで、点数からランクが返る「自作判定関数」になります。


複数項目を使う判定式を関数化する

売上 × 利益で「優良顧客」かどうか判定する

B2:売上
C2:利益

条件
売上 100,000 以上 かつ 利益 10,000 以上 → 優良顧客(TRUE)
それ以外 → 優良ではない(FALSE)

単純な IF/AND で書くとこうです。

=AND(B2>=100000, C2>=10000)

これを LAMBDA で「優良フラグ関数」にします。

=LAMBDA(売上, 利益,
  AND(売上>=100000, 利益>=10000)
)

セルで試すなら、

=LAMBDA(売上, 利益,
  AND(売上>=100000, 利益>=10000)
)(B2, C2)

この LAMBDA を「優良顧客フラグ」という名前で登録すると、

=優良顧客フラグ(B2, C2)

で TRUE/FALSE が返ってきます。

さらに、ラベルを返したければ、中身を IF に変えるだけです。

=LAMBDA(売上, 利益,
  IF(AND(売上>=100000, 利益>=10000), "優良", "通常")
)

日付+ステータスの判定式を関数化する

期限切れ&未処理を一発で判定する

A2:期限日
B2:ステータス(”未処理” / “処理中” / “完了”)

条件
期限日が今日より前 かつ ステータスが「未処理」 → 要対応
それ以外 → 空白

通常の判定式はこうです。

=IF(AND(A2<TODAY(), B2="未処理"), "要対応", "")

これを LAMBDA で「要対応判定関数」にします。

=LAMBDA(期限日, ステータス,
  IF(AND(期限日<TODAY(), ステータス="未処理"), "要対応", "")
)

セルで A2, B2 を判定するときはこうです。

=LAMBDA(期限日, ステータス,
  IF(AND(期限日<TODAY(), ステータス="未処理"), "要対応", "")
)(A2, B2)

名前「要対応判定」として登録しておけば、

=要対応判定(A2, B2)

と書くだけで、どの表でも同じ判定ロジックを使い回せます。


LAMBDA を名前定義して自作関数にする手順

実際の操作の流れ(イメージ)

1つの判定式を例に、流れだけ整理します。

1つ目は「完成済みの判定式を用意する」
まず、普通にセルで判定式を完成させます。
例:
=IF(A2>=60,"合格","不合格")

2つ目は「変わる部分を引数に置き換えて LAMBDA で包む」
A2 を「点数」という引数名に変えて、LAMBDA を付けます。

=LAMBDA(点数, IF(点数>=60,"合格","不合格"))

セルで試すなら …)(A2) と付けて確認します。

=LAMBDA(点数, IF(点数>=60,"合格","不合格"))(A2)

3つ目は「名前の定義に登録する」
確認して問題なければ、…)(A2) の「(A2)」を取った形

=LAMBDA(点数, IF(点数>=60,"合格","不合格"))

これをコピーして、

数式タブ → 名前の管理 → 新規作成

名前:合否判定(など、分かりやすい名前)
参照範囲:上の LAMBDA 式を貼り付け

4つ目は「自作関数として呼び出す」
登録できたら、どのセルでも

=合否判定(A2)

と書くだけで使えます。


例題

問題1

A2 に点数が入っています。
60以上なら「合格」、それ以外なら「不合格」と表示する判定式を関数化したいとします。

引数名を「点数」とし、セルで A2 を評価する LAMBDA 式を書いてください。

=LAMBDA(点数,
  IF(点数>=60, "合格", "不合格")
)(A2)

問題2

A2 に点数が入っています。
80以上→「A」、60以上→「B」、40以上→「C」、それ以外→「D」
という成績判定を行う関数を、引数「点数」で LAMBDA 化し、
セルで A2 を評価する式を書いてください。

=LAMBDA(点数,
  IFS(
    点数>=80, "A",
    点数>=60, "B",
    点数>=40, "C",
    TRUE,     "D"
  )
)(A2)

問題3

B2 に売上、C2 に利益が入っています。
売上が 100,000 以上 かつ 利益が 10,000 以上なら TRUE、
それ以外は FALSE を返す「優良フラグ」関数を作りたいとします。

引数を「売上」「利益」とし、セルで B2,C2 を評価する LAMBDA 式を書いてください。

=LAMBDA(売上, 利益,
  AND(売上>=100000, 利益>=10000)
)(B2, C2)

問題4

A2 に期限日、B2 にステータス(”未処理” / “処理中” / “完了”)が入っています。
期限日が今日より前 かつ ステータスが「未処理」のとき「要対応」、
それ以外は空白を返す判定式を、引数「期限日」「ステータス」の LAMBDA として、
セルで A2,B2 を評価する形で書いてください。

=LAMBDA(期限日, ステータス,
  IF(AND(期限日<TODAY(), ステータス="未処理"), "要対応", "")
)(A2, B2)

問題5

B2 に数量、C2 に単価が入っています。
数量>0 かつ 単価>0 のときは 数量×単価 を返し、
それ以外は空白を返す金額計算を「金額計算」関数として LAMBDA 化したいとします。

引数を「数量」「単価」とし、セルで B2,C2 を評価する LAMBDA 式を書いてください。

=LAMBDA(数量, 単価,
  IF(AND(数量>0, 単価>0), 数量*単価, "")
)(B2, C2)

まとめ

「判定式を関数化 → LAMBDA」の流れは、実はシンプルです。

1つ目は「まず普通に判定式をセルで完成させる」
2つ目は「変わる値を引数にして LAMBDA で包む」
3つ目は「名前定義に登録して、自作関数として再利用する」

これだけで、あなたのよく使う判定ロジックが、
=合否判定(A2)
=優良顧客フラグ(B2,C2)
のような“オリジナル関数”に変わります。

「これはうちのルールだよな」と感じる判定式がひとつでもあるなら、
それを LAMBDA で関数化してみるところから、ぜひ始めてみてください。

タイトルとURLをコピーしました