こんにちは。ヒトツメです。
まだ最新のExcelでしか使えませんが、つい先日、新しくExcelの新関数が使えるようになりました。
その代表であるLAMBDA関数の触れ込みは、「プログラミングをしなくなる」というもので、自作の関数を作れるようになるというものです。
今日はそんなLAMBDA関数の使い方について、少し考えてみたいと思います。
LAMBDA関数の基本機能
LAMBDA関数はカッコが2回
既にMicrosoftのサポートページにLAMBDA関数については解説のページが出ていますが、これを読むだけだと、いまいち何を書いてあるのかよくわからないかもしれません。
そこで、個人的に感じているLAMBDA関数の最大の特徴からまずお話したいのですが、それは、従来の関数と異なり、セルに入力する使い方をするのであれば、カッコを二回使うということです。
一番簡単なLAMBDA関数の使い方ですが、例えば、セルに入れる場合、次のように使います。
=LAMBDA(x,y,x+y)(1,2)
この式をセルに入れると、「3」という数字が返ってきます。
LAMBDA関数の返却は「関数」
一見すると何をしているのやら、という感じですが、これは、「LAMBDA(x,y,x+y)」というの部分が、「関数」として扱われているということです。
通常、Excelの関数はその結果として数値や文字列など、Excelのセルに入れればそのまま使えるものが返されるのが普通です。一部、OFFSET関数など、配列を返却するものもありますが、LAMBDA関数は、「関数」を返却します。
LAMBDA関数は、一番最後に入っている引数以外は、LAMBDA関数によって返却される関数の引数となります。したがって、上記の例で行くと、新しくLAMBDAによって生み出された関数の引数は、「x」と「y」ということになります。ここに、それぞれ「1」「2」と入っているので、LAMBDA関数の最後の引数である「x+y」にしたがって、「1+2」が計算され、「3」が返却される、ということになります。
数式の名前の管理を
このような関数は、基本的にはセルに直接入力することは想定されていません。
Microsoftの解説の手順3にあるように、新しく作った関数を、数式タブの「名前の管理」から、登録して、そのExcelファイルの中で関数を使いまわせるようにして、使うということが想定されています。
LAMBDA関数を使うべき場所
計算式が長い場合
このようなLAMBDA関数を使うべき場面は、あまり多くないかもしれませんが、一つ考えられるケースとしては、計算式が長い場合です。
まさに前回の高速VLOOKUPのように、記載する数式が非常に長い場合、有効です。
例えば、次のようなLAMBDA関数を、名前の管理から、HIGHSPEEDVLOOKUPとすれば、非常に便利です。
=LAMBDA(lookup_value, table_array, col_index_num, IF(VLOOKUP(lookup_value,table_array,1,1)=lookup_value,VLOOKUP(lookup_value,table_array,col_index_num,0),NA()))
少々長いですが、これを登録しておくと、HIGHSPEEDVLOOKUP([検索値],[検索範囲],[戻り値の列番号])という記載だけで、高速VLOOKUPを利用することができます。
処理をわかりやすく管理する
もう一つ考えられるケースは、関数で処理している内容をわかりやすくしたい場合です。
実施している処理に自分のわかりやすい名前を付けておくことで、あとからデバッグをしやすくしたりする、といったケースです。
ただ、この場合は非常に稀だと思います。
絶対参照と相対参照を使ったり、ちょっとした工夫をすることで、同じような繰り返し処理を、ミスせずに記載することは、Excelではそこまで難しくありません。
LAMBDAが使えるようになったからと言って、むやみに関数を作り、名前を付けて管理するのは、逆効果の可能性もありので、十分注意する必要があります。
SCAN関数やMAP関数を使う場合
最後にLAMBDAが有効に使えると考えられるケースとしては、同じタイミングで導入されたSCAN関数やMAP関数を使う場合です。ただ、これに関しては処理がかなりややこしく、あまり通常の処理で使う場面はありませんので、この場では割愛します。
今後日常的に使う場面が出てくるようなことがあれば、また解説を投稿したいと思います。
ざっと見た感じでは、機械学習を簡易に実装する場合などに使えるような気がしますが、Excelでそこまでの処理をするのは、あまり想定されていないように思います。
- MAP関数:与えられた配列の各要素に対しLAMBDA関数の処理を施し、新しい配列を返す
- REDUCE関数:初期値と配列を与え、配列から一つずつ要素を取り出してLAMBDA関数の処理を施し、最終的に一つの値にまとめる
- SCAN関数:初期値と配列を与え、配列から一つずつ要素を取り出してLAMBDA関数の処理を施し、新しい配列を返す
- MAKEARRAY関数:LAMBDA関数の処理を適用して、指定された行と列の配列を返す
- BYROW関数:各行にLAMBDA関数の処理を適用し、その結果の配列を返す
- BYCOL関数:各列にLAMBDA関数の処理を適用し、その結果の配列を返す
どれも、一見してどういった場面で使うかよくわからないと思いますが、ご興味のある方は是非調べてみてください。
さいごに
いままでは、関数を作るとすると、VBAを使って、「Function」からプログラミングをする必要がありました。LAMBDA関数があれば、そのような操作をしなくても、手軽に新しい関数を作ることができます。
マクロが有効になったExcelファイルについては、不正なマルウェアの温床になっているといわれていますし、今後、外部から入手したマクロ付きブックについては、その有効化が制限されるとも言われていますので、LAMBDA関数を使う場面は、今後徐々に増えていくのかもしれません。
ただ、LAMBDA関数を使う上では、「むやみに使わないこと」「使うとしてもわかりやすい関数名をつけること」が欠かせません。ほかの人が見たときに分かりにくくなっていると、結局はブラックボックス化しかねませんので、そのあたりはうまく整理しながら実装していく必要がありそうです。
コメント