スプレッドシートの基礎の基礎〜ArrayFormulaの初級的使い方とメリット〜

スプレッドシート
この記事は約4分で読めます。
Advertisements

ArrayFormula関数のメリット

ArrayFormula関数は一つのセルに関数を入力するだけで指定範囲内のセルに同一の計算式を適用することが可能です。そのため、利用すると以下のようなメリットがあります。

  • メンテナンスが楽
  • 表示速度が向上する
  • 関数の入力速度向上

ArrayFormula関数の概要

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

https://support.google.com/docs/answer/3093275?hl=ja

要は配列数式を複数セルに展開できるというものです。また、非配列関数(一般の関数と思ってもらえればOK)でarrayformulaを利用するとarrayformulaみたく展開できると。

実際の関数

ARRAYFORMULA(SUM(IF(A1:A10>5, A1:A10, 0)))

ARRAYFORMULA(A1:C1+A2:C2)

サンプルで挙げられていた関数2つです。これだけみてもよく挙動がわからないかもしれませんが、arrayformula関数に様々な形式の計算式(関数含む)を入れて動くということがわかればまずは十分です。

実際にどのような結果になるのでしょうか?実際の計算結果を含めてみていきます。

関数の複数範囲化:ARRAYFORMULA(SUM(IF(A1:A10>5, A1:A10, 0)))

みるのが速いということで、どんな挙動をするかみていきましょう。

【入力値の前提】

A列1行目→10行目: それぞれ1〜10の数値

【関数設定とやりたいこと】

以下を実現したいとして、考えていきます。
・5より大きい値の合計
・5より大きい値のうち中央値を算出

5より大きい値の合計

これは、正直言えば、sumifを使えば事足ります。arrayformulaを使って、sumとifで集計すること方法を考えると、それぞれsumとifを利用する場合に比べて非常に関数は簡潔ですが、それよりもsumif関数の方が簡易です。

これは、averageif/ countif の場合も同様です。

要は、スプレッドシートがXXifという形の関数を提供しているものは、そのままそれを利用しましょう。

5より大きい値のうち中央値を算出

片方で、実はmedianifという関数はスプレッドシートには実装されていません。そのため、スプレッドシートが提供していない関数を複数展開する場合は、arrayformulaは非常に役に立ちます

=ArrayFormula(median(if(A1:A10>5,A1:A10)))

上記のように関数を作成することで、A1:A10の範囲内で5より大きいものをif式で抽出して、median(中央値)を計算してくれます。

複数範囲の足し算:ARRAYFORMULA(A1:C1+A2:C2)

みていただければわかる話でもありますが、この関数が実際にどのような計算をするのか、つまり配列数式の計算され方の考え方をみていきましょう。

ARRAYFORMULA(A1:C1+A2:C2) //G2セルに入力

【黄色ブロック】【赤色ブロック】の2つを”+”で計算するということになります。

順々に行くと、以下の計算が繰り返されていくことを意味しています。
対象:G2セル
計算:A1+A2

対象:H2セル
計算:B1+B2

対象:I2セル
計算:C1+C2

つまりは、配列のように指定した範囲(A1:C1とA2:C2)をそれぞれ、計算式で計算して対象のセルに順次表示させていっているということです。

まとめ

膨大なデータや関数処理をスプレッドシートに埋め込むとすぐに重くなってきます。Googleさんも頑張ってくれますが、まずは自分たちで軽くする努力も必要です。

また、表示速度が上がれば待たされることもありませんし。

その点でarrayformula関数は非常に強力なツールですので、少し触ってみてもらうといいかと思います。最初のうちは、どう計算されるのかよくロジックがわからないとなりがちですが、使えば特に難しいことはないので、慣れてくると思います。

コメント