今回は、ExcelのLAMBDA関数を使って、自分専用のオリジナル関数を作る方法を紹介します。同じような数式を何度もコピーしている方や、長い数式を誰かに引き継ぐ機会がある方に役立つ内容です。
LAMBDA関数とは
LAMBDA関数は、よく使う計算式に名前を付けて、SUMやIFのような関数と同じ感覚で呼び出せるようにする仕組みです。作った関数はブック内のどのセルからでも使えるため、同じ数式を貼り付けて回る必要がなくなります。
VBAやマクロを書く必要がない点も特徴です。数式の知識だけで扱えるため、プログラミングに慣れていない方でも取り組みやすい機能といえます。
この記事の対象環境
この記事は、Windows版のMicrosoft 365のExcelを前提に説明します。LAMBDA関数はMicrosoft 365のほか、Excel 2024(Windows版・Mac版)でも利用できます。Excel 2021以前の買い切り版では使えないため、関数を共有する相手のExcelのバージョンも確認しておくと安心です。Mac版では、関数を登録するメニュー名が一部異なります(後述)。
基本の書式
書式は次のとおりです。
=LAMBDA([引数1, 引数2, …,] 計算式)
- 引数:関数に渡す値の名前です。セル参照、数値、文字列などを受け取れます。省略でき、最大253個まで指定できます。
- 計算式:最後に置く必須の部分で、関数の結果として返す数式を書きます。
たとえば「価格と数量を受け取って小計を返す」という処理なら、=LAMBDA(価格, 数量, 価格*数量) のように書きます。引数名は計算式の中で変数のように使えます。
オリジナル関数を作る3つのステップ
LAMBDA関数は、いきなり名前を付けて登録するよりも、段階を踏んで確認しながら作るほうがミスを見つけやすくなります。
ステップ1:元になる数式を普通に作って確かめる
最初に、LAMBDAを使わない通常の数式で計算が合っているかを確認します。たとえば、実績と目標から達成率を出し、目標が空欄や0のときは空白を表示したい場合は、次のような数式をセルに入力して結果を確かめます。
=IF(B2=0,””,A2/B2)
この段階で正しい結果が出ていれば、後でLAMBDA化したときにエラーが出ても「数式そのもの」ではなく「LAMBDAの書き方」に原因を絞り込めます。
ステップ2:セル上でLAMBDAを試す
次に、セル参照の部分を引数名に置き換えてLAMBDAの形にします。ここで注意したいのは、LAMBDAを書いただけでは結果が返らないという点です。呼び出す値を渡さずにセルへ入力すると、#CALC!エラーになります。
セル上で動作を確かめるときは、LAMBDAの後ろにかっこで値を続けて書きます。
=LAMBDA(実績, 目標, IF(目標=0,””,実績/目標))(A2,B2)
後ろの (A2,B2) が、引数「実績」と「目標」に渡す値です。期待どおりの結果が出れば、関数の定義と値の受け渡しが正しく動いていることになります。
ステップ3:名前の管理に登録する
動作を確認できたら、名前を付けて登録します。
- [数式]タブ → [名前の管理]を選択します(Mac版では[数式]→[名前の定義])。
- [新規]を選択します。
- [名前]に関数名(例:達成率)を入力します。
- [範囲]は既定のブックのままにします。
- [コメント]に関数の用途と引数の説明を入力します。
- [参照範囲]に、末尾の (A2,B2) を除いたLAMBDAの式を入力します。
=LAMBDA(実績, 目標, IF(目標=0,””,実績/目標)) - [OK]を選択し、[閉じる]でダイアログを閉じます。
登録後は、任意のセルで =達成率(A2,B2) のように入力するだけで計算できます。
使いやすい関数にするためのコツ
コメント欄に引数の説明を書いておく
名前の管理の[コメント]は省略できますが、入力しておくことをおすすめします。ここに書いた内容は、セルに関数名を入力したときの数式オートコンプリートのヒントや、[関数の挿入]ダイアログに表示されます。入力できるのは255文字までです。
「実績と目標を受け取り達成率を返す。目標が0なら空白」のように、用途・引数の順番・例外時の動きを短くまとめておくと、数か月後の自分や同僚が迷わずに使えます。
関数名と引数名は意味の伝わる言葉にする
LAMBDAの関数名と引数名は、Excelの「名前」のルールに従います。1点だけ例外があり、引数名にはピリオド(.)を使えません。
「x」「y」のような短い名前でも動きますが、「単価」「数量」「開始日」のように中身が分かる名前にしておくと、数式を読み返したときの理解が早くなります。また、既存の関数名やセル番地と紛らわしい名前は避けたほうが無難です。
エラーが出たときの確認ポイント
LAMBDA関数でよく出るエラーと、主な原因は次のとおりです。
- #CALC!:セルにLAMBDAだけを書き、値を渡して呼び出していない。
- #VALUE!:渡した引数の数が、定義した引数の数と合っていない。引数を253個より多く指定した場合もこのエラーになります。
- #NUM!:関数が自分自身を呼び出す構成で、呼び出しの回数が多くなりすぎた。
#VALUE!が出たときは、まず「定義した引数の数」と「呼び出し時に渡している値の数」を見比べると、原因にたどり着きやすくなります。
修正は名前の管理から行う
登録した関数の計算内容を変えたいときは、[名前の管理]で関数名を選び、参照範囲の式を編集します。1か所を直せば、その関数を使っているセルすべてに反映される点が、数式をコピーして使う方法との違いです。修正前には、ステップ2と同じようにセル上で新しい式を試しておくと、登録後の不具合を防げます。
業務で使いやすいオリジナル関数の例
ここでは、日常の表作成で応用しやすい例をいくつか挙げます。いずれも[名前の管理]の参照範囲に登録して使う想定です。
姓と名を空白区切りで結合する
名前:氏名結合
=LAMBDA(姓, 名, TRIM(姓)&” “&TRIM(名))
使い方:=氏名結合(A2,B2)
TRIMで前後の余分な空白を取り除いてから結合するため、入力時に紛れ込んだスペースの影響を受けにくくなります。
日付を「○年○月」の形で表示する
名前:年月表示
=LAMBDA(日付, TEXT(日付,”yyyy年m月”))
使い方:=年月表示(C2)
月別の集計表の見出しを作るときなど、同じ表示形式を何度も指定する場面で手間を減らせます。
空欄なら「未入力」と表示する
名前:未入力チェック
=LAMBDA(値, IF(値=””,”未入力”,値))
使い方:=未入力チェック(D2)
入力漏れの確認用の列を作るときに便利です。表示する文字を変えたい場合も、名前の管理で1か所を修正するだけで済みます。
運用するときの注意点
- 関数はブックごとに保存される:名前の管理に登録したLAMBDAは、そのブックの中で使えるものです。別のブックで使いたい場合は、そちらにも登録が必要です。
- 相手の環境を確認する:LAMBDAに対応していないバージョンのExcelでは、関数が正しく計算されません。共有前に、相手がMicrosoft 365またはExcel 2024を使っているかを確認しておきましょう。
- 範囲の設定:[範囲]は既定のブックのほか、特定のシートを選ぶこともできます(Excel for the webを除く)。特別な理由がなければ、ブック全体で使える設定のままが扱いやすいでしょう。
- 関数の一覧を残しておく:登録した関数が増えてきたら、関数名・用途・使い方をまとめたシートをブック内に用意しておくと、引き継ぎの際に役立ちます。
まとめ
LAMBDA関数を使うと、よく使う数式に名前を付けて、組み込み関数と同じように呼び出せるオリジナル関数を作れます。ポイントを振り返ります。
- まず通常の数式で計算を確かめ、次にセル上でLAMBDAに値を渡して動作を確認する
- 確認できたら[数式]→[名前の管理]→[新規]で関数名を付けて登録する
- コメント欄に用途と引数の説明を書き、意味の伝わる関数名・引数名にする
- #CALC!は呼び出し忘れ、#VALUE!は引数の数の不一致を疑う
- 修正は名前の管理で1か所直すだけで、使っているセルすべてに反映される
同じ数式を何度も入力している作業があれば、まずは1つ、小さな関数から作ってみてはいかがでしょうか。