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の動的配列数式(スピル)が自動的に同じ役割を果たします。