LAMBDA関数 ● オリジナルの関数を定義する

[Microsoft 365]

Excelの LAMBDA(ラムダ)関数の使い方を紹介します。

Microsoft 365の新関数であるLAMBDA関数を使用すると、関数を定義できます。VBAでプログラミングしなくても、Excelの一般機能だけでオリジナルの関数を自作できるので画期的です。ここでは自作関数の定義の方法と、定義した自作関数の使用方法を紹介します。

スポンサーリンク

はじめに

ここでは「関数を定義する関数」の解説をします。「関数」に2つの意味があり紛らわしいので、「関数を定義する関数」を「LAMBDA関数」と明記し、LAMBDA関数によって定義される関数を「自作関数」と呼ぶことにします。自作関数は一般では「カスタム関数」「ユーザー定義関数」などと呼ばれますが、初心者にとっては「自作関数」のほうがわかりやすい気がしますので。

また、解説中には以下の3種類の「引数」が登場します。

  • 引数❶ : LAMBDA関数の引数
  • 引数❷ : LAMBDA関数で定義する自作関数の引数(一般に「仮引数」と呼ばれる引数)
  • 引数❸ : 自作関数の引数(一般に「実引数」と呼ばれる引数)

混乱しがちですが、注意して読み進めてください。

書式

オリジナルの関数を定義する
=LAMBDA([変数1, 変数2…], 計算式)

変数]を引数名として[計算式]の結果を返す自作関数を定義します。

LAMBDA関数の引数

引数 説明
変数 自作関数の引数名となる文字列を指定する。半角の角カッコ「[ ]」で囲んで指定すると、自作関数の引数を省略可能にできる。[変数]を1つも指定しない場合、引数を持たない自作関数となる。最大253個指定できる。
計算式 変数]を使用した計算式を指定する。自作関数を実行する際、[変数]に値が代入されて[計算式]が計算され、その計算結果が戻り値となる。

一般の関数はセルに入力すると関数の計算が行われ、その結果が表示されます。一方、LAMBDA関数の場合、「=LAMBDA(変数1, 変数2, 計算式)」は自作関数の定義にすぎず、これをセルに入力してもエラーになるだけです。自作関数の戻り値を得るには、自作関数を計算するための引数を指定する必要があります。自作関数の引数を指定するには、以下の方法があります。

  • LAMBDA関数の後ろに自作関数用の引数を指定する
  • LAMDBA関数を関数名として登録して通常の関数のように自作関数用の引数を指定する
  • LAMBDA関数とヘルパー関数を一緒に使用して、ヘルパー関数経由で自作関数用の引数を指定する

なお、省略可能な引数を持つ自作関数は、このページで扱いません。「ISOMITTED関数 ● LAMBDA関数の引数が省略されているかどうか調べる」を参照してください。

使用例…三角形の面積を求める関数を定義する

三角形の底辺と高さから面積を求める関数を定義してみましょう。ここでは自作関数の引数名を「底辺」「高さ」とすることにします。[変数1]に1つ目の引数名である「底辺」、[変数2]に2つ目の引数名である「高さ」を指定します。[計算式]には、面積を求める式「底辺*高さ/2」を指定します。

=LAMBDA(変数1, 変数2, 計算式)

=LAMBDA(底辺,高さ,底辺*高さ/2)

上記の式を直接セルに入力すると、[#CALC!]エラーになるので注意が必要です。セルに入力する方法は、次節の「入力方法1」「入力方法2」「入力方法3」を参照してください。

LAMBDA関数による関数の定義例

定義例と説明
=LAMBDA(TODAY()+1)
明日の日付のシリアル値を求める(引数を持たない自作関数)
=LAMBDA(x,x*1000)
[x]の1000倍の数値を求める
=LAMBDA(x,y,x+y)
[x]と[y]の和を求める
=LAMBDA(氏名,氏名 & " 様")
[氏名]の末尾に「 様」を付ける
=LAMBDA(価格,割引率,ROUND(価格*(1-割引率),0))
[価格]と[割引率]から割引価格を求める
=LAMBDA(税抜価格,消費税率,ROUNDDOWN(税抜価格*消費税率,0))
[税抜価格]と[消費税率]から消費税額を求める
=LAMBDA(税抜価格,消費税率,ROUNDDOWN(税抜価格*(1+消費税率),0))
[税抜価格]と[消費税率]から税込価格を求める
=LAMBDA(税込価格,消費税率,ROUNDUP(税込価格/(1+消費税率),0))
[税込価格]と[消費税率]から税抜価格を求める

入力方法1…LAMBDA関数の後ろに直接引数を指定する

LAMBDA関数は、単独でセルに入力できません。セルに入力するには、LAMBDA関数全体を自作関数の関数名と見なして、その後ろに自作関数の引数を指定します。

例えば、セルB3に底辺、セルC3に高さが入力されている場合、次のように入力すると三角形の面積を求めることができます。

セルD3 | =LAMBDA(底辺,高さ,底辺*高さ/2)(B3,C3)

図1 LAMBDA関数を使用して三角形の面積を求める自作関数を定義し、定義した自作関数の引数[底辺]にセルB3、[高さ]にセルC3を指定した。

この入力方法は、自作関数が意図したとおりの戻り値を返すかどうか、テストするための手段として有効です。自作関数を実用的に使用するには、以下の「入力方法2」を使用してください。

ちなみに、自作関数が引数を持たない場合でも、カッコの入力は必要です。日付の表示形式を設定したセルに次の数式を入力すると、明日の日付が表示されます。

=LAMBDA(TODAY()+1)()

入力方法2…LAMBDA関数を登録して通常の関数のように使用する

LAMBDA関数で定義した自作関数を通常の関数と同じように使用するには、関数名を付けてブックに登録します。ここでは、三角形の面積を求める自作関数を「TRIAREA」という関数名で登録することにします。この関数名は、「TRIANGLE(三角形)」と「AREA(面積)」を組み合わせて命名しました。

実際にやってみましょう。まず、[数式]タブの[名前の定義]をクリックします。

図2 [数式]タブの[名前の定義]をクリックする。

[新しい名前]ダイアログボックスが開くので、以下のように設定します。

  • [名前]欄 : 関数名を入力する。
  • [範囲]欄 : 初期値の[ブック]のままでOK。特定のシートだけで使う関数であればシート名を指定。
  • [コメント]欄 : 入力しなくてもよいが、関数の説明を入力しておくと後々便利。
  • [参照範囲]欄 : LAMBDA関数を入力する。

なお、図1ではLAMBDA関数の後ろに引数の「(B3,C3)」を入力しましたが、[参照範囲]欄では「(B3,C3)」の手前までの「=LAMBDA(底辺,高さ,底辺*高さ/2)」を入力します。

図3 [名前][コメント][参照範囲]を入力して[OK]をクリックする。

以上で、「LAMBDA(底辺,高さ,底辺*高さ/2)」が「TRIAREA」という名前で登録されました。

続いて、自作関数(TRIAREA関数)をセルに入力してみます。図1では「=LAMBDA(底辺,高さ,底辺*高さ/2)(B3,C3)」と入力しましたが、今回は「LAMBDA(底辺,高さ,底辺*高さ/2)」の部分を「TRIAREA」という関数名に置き換えて入力します。

=TRIAREA(底辺, 高さ)

セルD3 | =TRIAREA(B3,C3)

図4 セルD3にTRIAREA関数を入力して、セルD5までコピーする。

なお、登録した自作関数は、登録したブックでのみ使用可能です。

メモ

入力支援機能が使える
登録した自作関数は、入力候補の一覧から入力できます。一覧で関数名を選択すると、図3の[コメント]欄に入力した「三角形の面積を求めます。」がポップヒントに表示されます。
また、自作関数の引数を入力する際に、ポップヒントに関数の書式が表示されます。

入力方法3…LAMBDA関数とヘルパー関数を一緒に使用する

LAMBDA関数には、下表の「ヘルパー関数」が用意されています。LAMBDA関数とヘルパー関数を一緒に使用することで、自作関数にさまざまな引数を渡せます。なお、下表の末尾にあるISOMITTED関数は、ほかのヘルパー関数とは異なり、自作関数に引数を渡すことはありません。

LAMBDA関数のヘルパー関数

関数 説明
MAP関数 LAMBDA関数に配列の各要素を渡して計算した配列を返す
BYROW関数 LAMBDA関数に配列の各行を渡して計算した配列を返す
BYCOL関数 LAMBDA関数に配列の各列を渡して計算した配列を返す
MAKEARRAY関数 LAMBDA関数に複数行複数列の連番を渡して計算した配列を返す
SCAN関数 LAMBDA関数の計算結果を途中経過も含めて配列として返す
REDUCE関数 LAMBDA関数の最後の計算結果を返す
ISOMITTED関数 LAMBDA関数の引数が省略されているかどうか調べる
スポンサーリンク

関連記事