Excel関数 逆引き集 | 条件式を再利用 → LAMBDA

Excel VBA Excel
スポンサーリンク

概要

「この判定ロジック、あちこちのシートで何回もコピペしてる…」
「同じような条件式を列ごとに微妙に変えて書いていて、修正が地獄…」

そういう「何度も使う条件式」を 自作関数として再利用できるようにする仕組み
LAMBDA 関数です。

LAMBDA を使うと、
「自分専用の IF や IFS みたいな関数」を Excel の中に作れます。
一度作っておけば、普通の関数と同じように =評価関数(A2) などと呼び出せるようになります。

ここでは「条件式を再利用する」という視点に絞って、
LAMBDA を初心者向けにかみ砕いて解説します。


LAMBDA の基本イメージ

LAMBDA の書式

LAMBDA の基本形は次のとおりです。

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

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

  1. 引数
    関数に渡す「入力」です(セル参照ではなく“名前”)。
    例:点数、売上、数量など。
  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 を名前定義して「自作関数」にする流れ

手順をざっくり

  1. まずセルで普通の式を完成させる
    例:
    =IFS(A2>=80,"A",A2>=60,"B",TRUE,"C")
  2. その式の「変わる部分(A2など)」を引数に置き換え、LAMBDA をくっつける
    例:
    =LAMBDA(点数, IFS(点数>=80,"A",点数>=60,"B",TRUE,"C"))
  3. セルの中で試すときは最後に (A2) を付けて動作確認
    =LAMBDA(点数, IFS(点数>=80,"A",点数>=60,"B",TRUE,"C"))(A2)
  4. OK なら式の本体部分
    =LAMBDA(点数, IFS(点数>=80,"A",点数>=60,"B",TRUE,"C"))
    をコピーして、 数式タブ → 名前の管理 → 新規 →
    名前:好きな関数名
    参照範囲:上の LAMBDA 式を貼り付け
  5. 以後、セルで =関数名(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 は、条件式を「一度作ったら何度でも呼べる自作関数」に変えてくれる仕組みです。

  1. まず普通に条件式(IF / IFS など)を書いて動かす
  2. 変わる値の部分を引数にし、LAMBDA で包む
  3. 名前定義に登録して、自作関数として再利用する

この 3 ステップだけで、

  • コピペ地獄から抜け出せる
  • 修正は「LAMBDA 1 箇所」だけで済む
  • 数式に「意味のある名前」がついて読みやすくなる

という恩恵が得られます。

「これはうちの会社の“お約束ロジック”だな」と思う条件式がひとつでもあるなら、
それを LAMBDA で関数化するところから、ぜひ試してみてください。

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