数量計算書をエクセルで作る方法

三浦プロジェクトは土木とEXCELの情報サイトです

より高度な関数を簡単に作る方法!VBA不要【LAMBDAとLET関数でヘロンの公式】

EXCEL活用テクニック【LETとは?】

【LET関数を使う】

Excelの最新バージョンである2021から導入されたLETという関数があります。もちろんMicrosoft365でも使えますし、「ラムダ関数」との相性もバッチリで、より高度で複雑な関数も簡単に作れちゃいますので、ここでご紹介したいと思います。

lambda関数の入力イメージ

LET関数の書式

書式

=LET([名前, 値, ...], 計算)

  • 名前

    名前(変数)。文字から始まる必要がある。

  • セル参照、文字列、数値などの名前(変数)に割り当てる値

  • 計算

    全ての名前と値を利用する計算

=LET(x,1,y,3,x+y)  4(計算結果) - - - 加算

=LET(x,1,y,3,(x+y)/2)  2(計算結果) - - - 平均

=LET(a,3,b,4,SQRT(a^2+b^2))  5(計算結果) - - - 斜距離

LET関数は名前と値の組み合わせ計算の2つから構成されていて、名前と値は126組まで定義することが可能です。これは変数を宣言することと同じで、それを基に中間計算や値などを数式内に格納したうえで、全ての計算結果を返すようになっています。言葉では分かりづらいので、エクセルの入力例を使って説明したいと思います。

ヘロンの公式を入力する

下記の公式は三角形の面積を既知の三辺から算出するヘロンの公式です。

  • A = s ( s - a ) ( s - b ) ( s - c )
  • S = 1 2 ( a + b + c )

三辺法(ヘロンの公式)

セルのC3,C4,C5に3,4,5が代入されているものとして話を進めます。

エクセルのセルC3C4C5に数値345を入力

セルの参照でヘロンの公式を組むと複雑で理解できません。同じ式が複数回必要になりパフォーマンスも低下します。
=SQRT((C3+C4+C5)/2*((C3+C4+C5)/2-C3)*((C3+C4+C5)/2-C4)*((C3+C4+C5)/2-C5))

LET関数でヘロンの公式を組むと一目瞭然です。解読という作業が無くなり、わかりやすい数式を作ることができます。
=LET(a,C3,b,C4,c,C5,s,(a+b+c)/2,SQRT(s*(s-a)*(s-b)*(s-c)))

ただ、これだけだと汎用性がないんですね。そこで、LAMBDA関数の登場となるわけです。

LET+LAMBDA関数

引数を与えることで結果を返すLAMBDA(以下「ラムダ」)関数の特性を活かし、a,b,cの値を引数として下記のように変更すれば、より使いやすい数式になります。

=LAMBDA(a,b,c,LET(s,(a+b+c)/2,SQRT(s*(s-a)*(s-b)*(s-c))))(C3,C4,C5)  6(計算結果) - - - ヘロンの公式

ヘロンの公式を記述したラムダ関数をセル内で呼び出すには、書式に続いて引数(数値またはセル参照)を与えてやる必要があります。引数が無いと#CALC!エラーを返しますので注意してください。ラムダ関数は、他のExcel関数とは少し異なる動作をします。数式の後ろに()を追加してラムダ関数に値を渡し、関数を呼び出す書式が必要です。

セルに直接入力する

  1. セルのC3,C4,C5に3,4,5を入力します。次に【ヘロンの公式】=LAMBDA(a,b,c,LET(s,(a+b+c)/2,SQRT(s*(s-a)*(s-b)*(s-c))))(C3,C4,C5) をマウスのドラッグで選択して、[Ctrl]+[C]を使ってコピーします。セルD3をアクティブ(クリック)にして数式バーに、[Ctrl]+[V]で貼り付けます。
    ヘロンの公式をLET+LAMBDA関数で計算する1
  2. [Enter]キーを押して入力を確定させると、セルD3に6が返されます。
    ヘロンの公式をLET+LAMBDA関数で計算する2

【LAMBDA関数に名前を付ける】

エクセルは名前を定義することができます。セルやセル範囲だけでなく数式にも名前を付けられますので = 関数名(引数,引数,...)のカタチにしてやれば使いやすく汎用性の高いものに変わります。ラムダ関数で作成したヘロンの公式の中で=LAMBDA(a,b,c,LET(s,(a+b+c)/2,SQRT(s*(s-a)*(s-b)*(s-c))))の部分に名前を定義して【HERON】関数を作ってみましょう。

=LAMBDA(a,b,c,LET(s,(a+b+c)/2,SQRT(s*(s-a)*(s-b)*(s-c))))(C3,C4,C5)

=HERON(C3,C4,C5)

  1. セルのC3,C4,C5に3,4,5を入力して、セルD3をアクティブ(クリック)にします。
    LAMBDA関数に名前を付ける1
  2. タブの【数式】をクリックすると、リボンが変わります。その中にある【名前の管理】を使いラムダ関数に名前を付けて、ブック内のセルから利用できるようにします。【名前の管理】をクリックするとダイアログボックスが表示されますので、ボックス内の[新規作成]をクリックします。
    LAMBDA関数に名前を付ける2
  3. 【新しい名前】のダイアログボックスが表示されますので、[名前]に HERON 参照範囲に =LAMBDA(a,b,c,LET(s,(a+b+c)/2,SQRT(s*(s-a)*(s-b)*(s-c)))) を入力して、OKボタンをクリックします。
    LAMBDA関数に名前を付ける3
  4. 【名前の管理】ダイアログボックスが表示され、登録した[HERON]を確認することができます。そのまま、[閉じる]ボタンをクリックします。
    LAMBDA関数に名前を付ける4
  5. 数式バーに、 =HERON(C3,C4,C5) を入力します。
    LAMBDA関数に名前を付ける5
  6. [Enter]キーを押して入力を確定させると、セルD3に6が返されます。
    LAMBDA関数に名前を付ける6