cellio

GoogleスプレッドシートのARRAYFORMULA関数:1つの数式で列全体を一括計算

GoogleスプレッドシートのARRAYFORMULA関数の使い方を徹底解説。数式をオートフィルせず列全体に適用し、空白行の非表示やIF、VLOOKUPとの組み合わせ、エラー対策まで網羅します。

著者 Ayoub Farid · · 4 分で読めます

通常、表計算ソフトでは2行目に数式を入力し、それを下のセルへオートフィル(下にコピー)して使います。しかし、ARRAYFORMULA関数を使えば、2行目に数式を1つ入れるだけで、すべての行を一括で計算できます。Googleフォームなどで後から新しく追加された行も、自動的に計算対象に含まれます。

構文

=ARRAYFORMULA(配列数式)

ショートカットキー:通常の数式を入力中に Ctrl+Shift+Enter(Macは Cmd+Shift+Enter)を押すと、自動的にARRAYFORMULA関数で囲まれます。

使用例:すべての行の売上を一括計算する

=B2*C2 を下に向かってオートフィルする代わりに、次のように記述します。

=ARRAYFORMULA(B2:B*C2:C)

末尾の行番号を省略したセル範囲(B2:B)を指定することで、シートの最下行まですべてカバーできます。

空白行をスキップする(非表示にする)

上記の数式のままだと、データが入っていない空白行に「0」が表示されてしまいます。これを防ぐにはIF関数を組み合わせます。

=ARRAYFORMULA(IF(B2:B="","",B2:B*C2:C))

見出し(ヘッダー)も同じ数式にまとめる

1行目に数式を入力し、波括弧 {} を使うことで、列の見出しテキストと計算結果を1つの数式で管理できます。

={"Revenue";ARRAYFORMULA(IF(B2:B="","",B2:B*C2:C))}

VLOOKUP関数と組み合わせる

=ARRAYFORMULA(IF(A2:A="","",IFERROR(VLOOKUP(A2:A,Prices!$A$2:$C$500,3,FALSE),"Not found")))

詳しくはスプレッドシートのVLOOKUP解説記事をご覧ください。

ARRAYFORMULA内で使えない関数

もともと複数の値を1つの結果にまとめて集計する関数(SUM、AVERAGE、AND、ORなど)は、行ごとの個別計算には対応していません。各行でAND条件を判定したい場合は、(B2:B>0)*(C2:C="Paid") のように条件同士を掛け算します。

よくあるエラーと原因

  • #REF!「配列結果は展開されませんでした」:数式が結果を展開しようとする下のセル範囲に、手入力された値や別の文字が残っています。該当するセルの内容を削除してクリアしてください。
  • スプレッドシートの動作が重い:データ量が極めて多い巨大なシートで末尾を指定しない範囲を使うと、処理速度が低下することがあります。必要に応じて B2:B5000 のように上限のセル範囲を指定してください。

Excelでの対応機能

最新バージョンのExcel(Microsoft 365など)では、スピル(動的配列)機能が自動で働くため、特別な関数で囲まなくても =B2:B500*C2:C500 と入力するだけで同様の計算が行えます。

よくある質問

ARRAYFORMULA関数は何をする関数ですか?

指定したセル範囲全体に対して一度に数式を適用し、各行に対応する計算結果をまとめて返す関数です。

ARRAYFORMULAで空白行に0が表示されないようにするには?

計算処理全体を IF(セル範囲="","",...) で囲むことで、参照先が空のセルなら空白を出力するように設定できます。

ARRAYFORMULAで#REF!エラーが出るのはなぜですか?

数式が結果を展開して表示しようとしているセル範囲の中に、すでに文字やデータが入力されたセルがあるためです。

ExcelにもARRAYFORMULA関数はありますか?

Excelに同じ名前の関数はありませんが、Excel 365の動的配列数式(スピル)が自動的に同じ役割を果たします。

あわせて読みたい