ちなみに

火曜日の空は僕を押しつぶした。

ARRAYFORMULAでMAXって書けないのでLAMBDA関数を覚えた

TL;DR

BYROWLAMBDA関数 を使いましょう。

本文

Google スプレッドシートを使っていて、なんかこういうデータがあったときに、各行の MAX を取りたくなったとする。

賢明なみなさんは =MAX($A1:$D1) って書いたあとに各行に適用していきたい気持ちをぐっと抑えて ARRAYFORMULA を使って =ARRAYFORMULA(MAX(A1:D)) って書くと思います。 しかし、残念ながらこれは想定通りに動きません。そうです MAXA1:D を引数として受け取ってしまうからです。

敗北した様子

私はここで一度くじけかけたのですが、いや、自分が考えることくらいすでに実現されているはず、と考え直してちょっと調べてみました。

そうするとどうも LAMBDA関数 が書けるということが分かりました。 これは何か引数を受け取って式を実行する我々のよく知るいわゆるLAMBDA関数であるということが分かりました。(MS Excelにもあるっぽい!)

これだけだったらあんまり意味がないのですが、どうやら LAMBDAヘルパー関数 (LHF) というものがあるらしく、これを組み合わせると各行に LAMBDA関数 を適用できるらしい。 そして、まさにそれをやるLHFが BYROW らしい。

おもむろに以下のように書いてみると思った通りの結果になりました。

= BYROW(A1:D10, LAMBDA(r, MAX(r)))

大成功

よく見ると A1:D10 という感じで終端の行数を書いてしまっています。 これは BYROW で空行を無視する方法が分かっていないからです。 誰か知っていたら教えてください。