doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

Excel LAMBDA・LET関数の作り方|Claudeに設計を頼めば自作関数はすぐ完成する

スポンサーリンク

Excelの数式が長くなりすぎて、自分でも何をしているのか分からなくなった経験はありませんか。IF文が5重にネストして横スクロールしないと全体が見えない、同じ計算式を10箇所にコピペしていてどれか1つ直し忘れる——こうした問題を解決するのがLAMBDA関数とLET関数です。

ただ、この2つは「知っているけど書けない」の代表格でもあります。そこで役立つのがClaudeです。この記事では、Claudeにカスタム関数の設計を依頼して、実務で使える数式を組み上げる手順を紹介します。

Excel LAMBDA・LET関数の作り方|Claudeに設計を頼めば自作関数はすぐ完成するのサンプル ▲ Excel+Claude サンプル

LAMBDAとLETの違いと、使えるバージョン

依頼の前に、この2つの役割を押さえておくと指示が的確になります。

LET関数は、1つの数式の中で「変数」を定義できる関数です。同じ計算を何度も書かずに済みます。たとえば単価を3回参照する数式なら、こう書けます。

=LET(単価, VLOOKUP(A2,商品!A:D,4,0),
     IF(単価>10000, 単価*0.9, 単価))

VLOOKUPを1回だけ実行して結果を使い回すので、記述量も計算負荷も減ります。

LAMBDA関数は、自分だけのオリジナル関数を作るための関数です。名前の定義に登録すれば、=営業日数(A2,B2) のように標準関数として呼び出せます。

対応バージョンは両者で異なります。LETはExcel 2021以降(Microsoft 365含む)で使えますが、LAMBDAはMicrosoft 365版とExcel 2024以降が必要です。この違いは依頼時に必ず伝える情報になります。

依頼に必ず入れる「4要素」テンプレ

依頼の精度は、次の4つを書くかどうかでほぼ決まります。

  1. 入力(引数) — 日付・金額・セル範囲など、何を渡すのか
  2. 出力 — 数値か文字列か、スピル(複数セルに展開)するのか
  3. データ例と環境 — 実際の値の形と、Excelのバージョン
  4. エラー処理の方針 — 該当なしは空文字、0除算は0、など

そのままコピーして使えるテンプレートがこちらです。

ExcelのLAMBDA関数でカスタム関数を作ってください。

【やりたいこと】(1行で)
【引数】名前と型
【データ例】実際のセルの値
【出力】型・スピルの有無
【エラー処理】該当なし・異常値のときの挙動
【環境】Microsoft 365版 / Excel 2024 など

名前の定義に登録する手順と、動作確認用のサンプル
データ・期待値を3パターン付けてください。

最後の2行が効きます。「登録手順も」がないとLAMBDA式だけ返され、使う段階で詰まります。「サンプルデータと期待値」を頼めば、検証がそのまま実行できます。

実践例1:営業日数を数えるカスタム関数

NETWORKDAYS.INTLの長い記述を毎回書くのが面倒、というケース。テンプレの4要素を埋めて依頼すると、次のような数式が返ってきます。

=LAMBDA(開始日, 終了日,
  LET(祝日, マスタ!$A$2:$A$50,
      日数, NETWORKDAYS.INTL(開始日, 終了日, 1, 祝日),
      IF(OR(開始日="", 終了日=""), "", 日数)
  )
)

祝日範囲を変数にまとめ、空欄なら空文字を返す処理まで入っています。「エラー処理の方針」を先に伝えた効果です。

名前の定義への登録手順

LAMBDA活用で最もつまずくのがここです。3ステップで完了します。

  1. 数式タブ → 名前の定義 をクリック
  2. 名前営業日数 と入力(スペース不可、セル参照と紛らわしい名前も避ける)
  3. 参照範囲に上のLAMBDA式を丸ごと貼り付けて OK

以降はシート上で =営業日数(A2,B2) と書けます。うまく動かないときは、先にシートのセルでLAMBDA式の末尾に (A2,B2) を付けて直接実行し、正しい値が出るか確かめてから登録すると切り分けが早いです。

実践例2:IFネストをLETで整理する

既存の巨大な数式を渡してリファクタリングを頼むパターン。効果が最も見えやすい使い方です。

Before(VLOOKUPが4回登場)

=IF(VLOOKUP(A2,商品!A:D,4,0)>10000,VLOOKUP(A2,商品!A:D,4,0)*0.9,
IF(VLOOKUP(A2,商品!A:D,4,0)>5000,VLOOKUP(A2,商品!A:D,4,0)*0.95,
VLOOKUP(A2,商品!A:D,4,0)))

依頼時は、条件として「計算結果は元の数式と完全に同じにする」「変数名は日本語で」「各変数の意味を説明する」の3点を添えます。

After

=LET(
  単価, VLOOKUP(A2,商品!A:D,4,0),
  割引率, IF(単価>10000, 0.9, IF(単価>5000, 0.95, 1)),
  単価 * 割引率
)

VLOOKUPの呼び出しが4回から1回になり、「1万円超なら1割引、5千円超なら5%引き」という意図が数式を読むだけで分かるようになります。「計算結果は元と完全に同じに」の一文が、意図しない仕様変更を防ぐ安全装置です。

なお、LETの変数名にはスペースが使えず、ブック内の既存の名前定義と同じ語を使うと衝突してエラーになります。単価 のような一般的な語を使うときは、名前の定義に同名がないか確認しておくと安全です。

もう一歩進んだ依頼

慣れてきたら、次のキーワードを依頼文に混ぜると設計の幅が広がります。

  • MAP/BYROW/SCAN — 「配列の各行にこの処理を適用して」と頼むと、作業列なしで一括処理する数式が返ります
  • 再帰LAMBDA — 自分自身を呼び出す構造。文字列の連続置換や階層データの集計に使えます
  • ISOMITTED — 引数を省略できるカスタム関数を作るときに使います。「第2引数は省略可、省略時は今日の日付」といった指定が可能です

使う前に確認しておきたい注意点

LAMBDAで定義した名前はそのブックの中だけで有効です。別ファイルにコピペしても動きません。共有するなら名前の定義ごとコピーするか、テンプレートブックを配布する運用にしましょう。

Excel 2021以前のユーザーにファイルを渡すと、数式に _xlfn.LAMBDA という文字列が混入し、セルには #NAME? が表示されます。社外提出用の資料では、あえて従来の数式で書くほうが安全な場面もあります。

そしてもう一点。Claudeが生成した数式は、必ず自分のデータで検証してから本番運用に乗せること。特に集計や請求に関わる数式は、手計算と突き合わせる一手間を惜しまないでください。#VALUE!#CALC! が出たら、その表示をそのまま貼り付けて「このエラーが出ます」と伝えれば、原因の切り分けまで付き合ってくれます。

まとめ

LAMBDAとLETは強力ですが、ゼロから書くと学習コストが高い関数です。入力・出力・データ例と環境・エラー処理——この4要素を伝えて設計を任せれば、そのコストを大きく圧縮できます。

まずは今使っている一番長い数式をコピーして、「これをLETで整理して」と投げてみてください。上のBefore/Afterのように、数式が半分の長さになる感覚を一度味わうと、もう元には戻れなくなるはずです。


関連記事

あわせてチェック