もっさんのブログ

ただの雑記ブログです

ARRAYFORMULA関数が有能すぎる件

ARRAYFORMULA関数?

ARRAYFORMULA関数」と聞いて何のことか分かる人は師と仰ぎたい。

これ、Google スプレッドシートで使われている関数のことなんです。スプレッドシートExcelみたいなやつね。Googleが提供しているツールです。

僕はこれまでスプレッドシートをちょくちょく使ってたんだけど、偶然にもこのグレートでパワフルでエキサイティングな関数に出会えたことに感動した。矯正せずに受け口のままだったら、目から落ちた鱗が開いた口にボトボト入ってたかも。

ARRAYFORMULA関数の有能さ

A列に1~100までのいずれかの数字が入っている。

A列に1から100までのいずれかの数字

ちなみに、ちまちまと数字は打ってないからね。

RANDBETWEEN関数を使って数字を出力している。

=RANDBETWEEN(1,100)

こう書くことで、1以上100以下のランダムな数字を返してくれる。

さて、ここで問題。

A列の数字が50以上だった場合は右のB列のセルには「〇」を、50未満だった場合は「×」を出力させたい。どうすればいいだろう?

なんだ簡単じゃん。

まず、B1セルに=if(A1>=50,"〇","×")と入力。B1セルを選択して、右下にカーソルを合わせて下にピーっと引っ張る。終わりや。

上司「パチパチ👏。ちなみにA列にはデータが10,000個入ってるから。ま、頑張って👍」
僕「(画面を見ながら茫然自失すること1秒後)...はい」

だがしかし。

今の僕は違う!

ARRAYFORMULA関数を知った僕はこんな上司にもマウントを取れるようになった。

B1セルには次のように入力する。

=ARRAYFORMULA(if(A1:A10000>=50,"〇","×"))

あとは事務所のトイレにまで届くくらいに高らかにEnterキーを押す。

これだけ。
これだけで、B1からB10000まで〇×が埋まる。

数式をいれたのはB1だけ。B2からB10000には数式は入っていない。けど、〇×が出力されている。

その証拠に、[表示形式] > [数式を表示]をクリックすると次のようになる。

数式を表示

すごくないですか?これ。
衝撃的過ぎるんだけど。

わざわざセルの右下を引っ張らずに済む。作業効率はかどるわぁ。

ARRAYFORMULA関数の使い方

Googleのドキュメント エディタ ヘルプでは次のように説明しています。

配列数式から返された値を複数行または複数列に表示したり、非配列関数で配列を使用したりすることができます。

配列数式については次のように説明しています。

1 つの範囲か、1 つのセル範囲または同じサイズの複数範囲を使用する数式か、1 つのセルより大きい結果を返す関数を指定します。

配列数式は、範囲を表す数式のこと。例えば、A1:A10000A:Bみたいに、セルまたは行・列番号をコロン(:)で繋いだもののこと、という解釈でいいのかな。

で、ARRAYFORMULA関数を使うと、本来配列数式を使わない関数や数式の中で配列数式が使えるんだよ、ついでにその結果を複数行(または複数列)に返すことができるんだよ、というわけだね。

文章での説明だと分かりにくいかもしれないから、「習うより慣れろ」ということで実際に自分でいろいろ実験してみるのがいいと思う。そして僕のこの感動を実感してほしい。

地味に便利なテクニック

下のように数式を編集中に...

数式の編集中

Ctrl+Shift+Enterを押す!
すると...

arrayformula関数を作るショートカット

あら便利。ARRAYFORMULA関数が作られて、その中に編集中の数式が入る!

不満?愚痴?文句?

多くの解説ページで紹介されているARRAYFORMULA関数のメリットは次の通り。

ソースは?根拠は?

少なくとも、Googleのドキュメント エディタ ヘルプではそんなこと一切説明していないが。

Googleの公式見解があるなり自分で計測したなりした上でそう主張しているのなら、せめて参照リンクを貼るなり、計測結果を示すなりしてくれよ。

誰もが簡単にアクセスできるネット上に情報を公開する者は、正確な情報を公開することが理想的だ。

しかし、何が正確か判断すること難しい場合もあるし、その判断が間違っている可能性もある。

だからこそ僕たちがすべきことは、自分の判断が正確であると妄信しないこと。間違っている可能性があることを自覚し、その情報が正確であると判断した根拠をページに載せる。そうすることで、ページを閲覧したユーザーに、ページのコンテンツの正確性を検証する機会を与えられる。

主張をするなら根拠を載せるべきだ。
それをしないのは、怠慢かつ高慢。

ちなみに、ARRAYFORMULA関数の高速化を検証した人もいる。この人の検証結果は次の通り。

超大量のデータが入っているファイルの場合は逆に処理がかなり遅くなります。実際にはデータがそれほど入っていないスプレッドシートの場合でも処理は遅くなっているのですが、体感できない範囲なので気づくことができません。

ネットの情報は過信すべきではないな。