TL;DR
本文
Google スプレッドシートを使っていて、なんかこういうデータがあったときに、各行の MAX を取りたくなったとする。
賢明なみなさんは =MAX($A1:$D1)
って書いたあとに各行に適用していきたい気持ちをぐっと抑えて ARRAYFORMULA を使って =ARRAYFORMULA(MAX(A1:D))
って書くと思います。
しかし、残念ながらこれは想定通りに動きません。そうです MAX が A1:D
を引数として受け取ってしまうからです。
私はここで一度くじけかけたのですが、いや、自分が考えることくらいすでに実現されているはず、と考え直してちょっと調べてみました。
そうするとどうも LAMBDA関数 が書けるということが分かりました。 これは何か引数を受け取って式を実行する我々のよく知るいわゆるLAMBDA関数であるということが分かりました。(MS Excelにもあるっぽい!)
これだけだったらあんまり意味がないのですが、どうやら LAMBDAヘルパー関数 (LHF)
というものがあるらしく、これを組み合わせると各行に LAMBDA関数 を適用できるらしい。
そして、まさにそれをやるLHFが BYROW らしい。
おもむろに以下のように書いてみると思った通りの結果になりました。
= BYROW(A1:D10, LAMBDA(r, MAX(r)))
よく見ると A1:D10
という感じで終端の行数を書いてしまっています。
これは BYROW で空行を無視する方法が分かっていないからです。
誰か知っていたら教えてください。