Googleスプレッドシートの ARRAYFORMULA関数の使い方

Googleスプレッドシートで同じ数式を何十行にもコピーしていて、行が増えるたびにコピー漏れや参照ズレが起きて困った経験はありませんか。

今回はそんな悩みを一発で解決してくれるARRAYFORMULA関数について、基本の使い方から「入れたのに反映されない」時の原因・対処法まで解説します。

ARRAYFORMULAって結局何ができるの?

リュージ、ARRAYFORMULAってよく聞くけど、普通に数式コピーするのと何が違うの?

一番の違いは「1つの数式で複数行・複数列をまとめて処理できる」ってこと。普通はD2に数式入れてD3、D4…とコピーしていくけど、ARRAYFORMULAならD2に1つ入れるだけで、あとは自動で下まで反映されるよ。

行を後から追加した時はどうなるの?

そこがポイント。「A2:A」みたいに列全体を指定しておけば、行を追加してもコピー不要で自動計算される。だから「ARRAYFORMULA=列を伸ばす数式」って覚えるとイメージしやすいよ。

Excelでも使えるやつ?

実はARRAYFORMULAはGoogleスプレッドシート専用。Excelにはないけど、Microsoft 365やExcel 2021以降だと「動的配列」という似た仕組みで近いことができるよ。

ARRAYFORMULAは、複数のセル範囲に対して1つの数式でまとめて処理を行う関数である。「A2:A」のように範囲を列全体で指定しておくことで、行を追加しても自動で計算が反映されるようになり、数式のコピー漏れや参照ズレを防げる。Googleスプレッドシート専用の関数でExcelでは使用できないが、Microsoft 365やExcel 2021以降では動的配列という近い機能で代替できる。

実際に書いてみる(単価×個数の例)

実際どう書くの?例えばB列に単価、C列に個数があって、D列に金額を出したい時。

D2セルに =ARRAYFORMULA(IF(B2:B=””, “”, B2:B*C2:C)) って入れるだけ。B列が空白の行は空欄のまま、値がある行だけ自動で金額が計算されるよ。

なんでIFで空白チェックしてるの?そのまま掛け算じゃダメなの?

IFなしだと、データがない行にまで「0」が表示されちゃうんだよね。空白行を空欄のまま保つために、IFで「空白なら空欄、そうでなければ計算」という条件を先に挟んでるんだ。

税込価格みたいな、もう少し複雑な計算でも同じ考え方でいいの?

うん、同じ骨組みでOK。=ARRAYFORMULA(IF(B2:B=””, “”, ROUND(B2:B*1.1,0))) みたいに、ROUNDを足せば端数を四捨五入した税込価格が一括で出せる。「空白チェック→計算」の型さえ覚えれば応用が効くよ。

ARRAYFORMULAの基本形は「=ARRAYFORMULA(IF(範囲="", "", 計算内容)))」という型で覚えると応用が効く。IFで空白チェックを先に挟むことで、データのない行に不要な0や記号が表示されるのを防げる。単価×個数の金額計算や税込価格の計算など、実務でよく使う場面はこの型の組み合わせでほとんど対応できる。

「反映されない」「エラーになる」時の原因と対処法

僕、この前ARRAYFORMULA入れたのに1行目にしか反映されなかったんだけど、あれ何?

それ、ものすごくよくあるつまずきポイント。よくある原因は2つあって、1つは「B2:C2」みたいに単一セルの範囲しか指定していないパターン。これだとARRAYFORMULAをつけても展開する範囲がないから、1行しか計算されないんだよ。

じゃあどう直せばいいの?

数式の中の範囲を「B2」じゃなくて「B2:B」のように、列全体か十分な行数の範囲に直すこと。数式内のすべてのセル参照を範囲指定に揃えるのがコツだよ。

もう1つの原因は何?

「配列の結果が別の配列の結果と重なっています」というエラー。これは、ARRAYFORMULAが展開しようとする範囲に、すでに別の値や数式が入っているのが原因。展開先のセルを空にしてから入れ直すと直るよ。

あと、TODAY関数とか日付系と組み合わせたら変な結果になったこともあった。

TODAYやNOWのような「引数を取らない関数」は、範囲を渡しても配列としてうまく展開されないことがある。こういう関数を使う場合は、無理にARRAYFORMULAでまとめず、1セルだけの計算に留めるのが安全だよ。

ARRAYFORMULAが1行しか反映されない主な原因は、数式内のセル参照が単一セル(B2など)のままになっていることである。すべての参照を「B2:B」のような範囲指定に揃えることで解消できる。また「配列の結果が別の配列の結果と重なっています」というエラーは、展開先の範囲に既存の値や数式が残っていることが原因であり、出力範囲を空にすることで解決する。TODAYやNOWのような引数を取らない関数は配列展開と相性が悪いため、無理に組み合わせない方が安全である。

IF・VLOOKUPと組み合わせた実務パターン

他の関数と組み合わせた実務パターンも知りたい!合否判定とかできる?

できるよ。=ARRAYFORMULA(IF(A2:A=””, “”, IF(A2:A>=60,”合格”,”不合格”))) みたいに、IFを二重にすれば「点数が60点以上なら合格」って判定を全行一括でできるよ。

VLOOKUPと組み合わせるとどうなるの?

商品IDから商品名を自動表示する、みたいなマスタ参照が一括でできる。=ARRAYFORMULA(IF(A9:A=””,””,IFERROR(VLOOKUP(A9:A,$A$2:$C$5,2,FALSE),””))) こんな形。IDを入力するだけで、下まで自動的に商品名が反映されるよ。

IFERRORって何のためについてるの?

IDが見つからない時、VLOOKUPは「#N/A」というエラーを返すんだけど、それがずらっと並ぶと見た目が悪い。IFERRORで囲むことで、見つからない場合は空欄にできるんだ。

ARRAYFORMULAはIF関数と組み合わせることで合否判定などの一括処理ができ、VLOOKUPと組み合わせることでマスタ参照を全行自動化できる。VLOOKUPと組み合わせる際はIFERRORで囲むことで、該当データがない場合の#N/Aエラー表示を空欄に変換でき、シートの見た目を崩さずに運用できる。

まとめ:ARRAYFORMULAの使いどころ早見表

使いたい場面数式の型注意点
単価×個数の一括計算=ARRAYFORMULA(IF(B2:B=””,””,B2:B*C2:C))出力列は事前に空にする
税込価格の一括計算=ARRAYFORMULA(IF(B2:B=””,””,ROUND(B2:B*1.1,0)))ROUNDで端数処理を忘れない
合否などの一括判定=ARRAYFORMULA(IF(A2:A=””,””,IF(A2:A>=60,”合格”,”不合格”)))条件式はIFを二重にする
VLOOKUPでのマスタ参照=ARRAYFORMULA(IF(A9:A=””,””,IFERROR(VLOOKUP(…),””)))IFERRORで#N/Aを防ぐ
反映されない時参照をすべて「A2:A」形式の範囲に統一単一セル参照が混ざっていないか確認

「空白チェック→計算」の型と、範囲指定さえ揃えれば怖くないってことだね。

そうだね。最初は単価計算みたいなシンプルな例で慣れて、IFやVLOOKUPとの組み合わせに進んでいけば、コピー漏れに悩まされる表作りから卒業できるよ。

ARRAYFORMULAは「空白チェックをIFで先に挟み、範囲はすべて列全体で統一する」という基本の型を押さえれば、単価計算から合否判定、マスタ参照まで幅広く応用できる。反映されない・エラーになるといったつまずきの多くは、参照範囲の指定ミスか出力先セルの重複が原因であり、原因を切り分けて対処すれば安定して運用できる。

関連記事

  1. スプレッドシートで自分だけフィルタをかける方法!スマホでの注意点も解説

  2. スプレッドシートのプルダウンの作り方|色付け・連動・複数選択まで解説

  3. Googleスプレッドシートの SUMIF・COUNTIF関数の使い方(条件範囲の指定ミスも解説)

  4. Googleカレンダーを共有するやり方!家族・チームでの使い分けも解説

  5. スプレッドシートのショートカット、覚えて本当に速くなる?挫折しない覚え方も解説

  6. Googleスプレッドシートのピボットテーブルの作り方(初心者がつまずくポイント付き)

  7. スプレッドシートの日付自動入力、実は「ずれる」「変わる」の落とし穴に注意!

  8. スプレッドシートのVLOOKUP関数の使い方(初心者がつまずくポイントも解説)

  9. スプレッドシートで「あの人が何を編集したか」を確認する方法