Google SheetsのARRAYFORMULAで「配列結果はデータを上書きするため展開されませんでした」を修正する

beginner📗 Google Sheets2026-05-22| Google Sheets(ウェブブラウザ — Chrome、Firefox、Safari、Edge);Google WorkspaceおよびGoogleの個人アカウント

Error Message

Array result was not expanded because it would overwrite data in B2.
#google sheets#arrayformula#ref#数式#データ展開

問題の概要

ARRAYFORMULAを入力したのに、列に結果が展開されず、Google Sheetsに小さなエラートライアングルが表示されます。ホバーすると次のメッセージが現れます:

Array result was not expanded because it would overwrite data in B2.

数式が止まってしまいます。メッセージ内のセル参照(B2、C5、D10など)は競合箇所によって変わりますが、根本的な原因は常に同じです。配列が書き込もうとしているセルに、すでに何かが存在しているのです。

なぜこのエラーが発生するのか

ARRAYFORMULAが結果を展開するには、対象範囲が完全に空である必要があります。その範囲内のセルに値、別の数式、スペース文字など何か一つでも入っていると、Sheetsは展開を拒否します。既存のデータを黙って上書きしないのは正しい動作ですが、数式が壊れた状態のまま残ってしまいます。

よくある原因:

  • 出力列に直接入力されたヘッダー行やラベル
  • 手動入力の際に残った古いデータ
  • 展開範囲内のセルにすでにある別の数式
  • 空に見えてもスペース文字(" ")が含まれているセル
  • 同じ列内で同じセルを競合するもう一つのARRAYFORMULA

手順1 — ブロックしているセルを特定する

エラーメッセージが問題箇所を直接示しています。「would overwrite data in B2」と表示されたら、B2をクリックして数式バーを確認してください。ただし、Sheetsが報告するのは最初の競合のみです。列のさらに下に別のブロッカーが存在する可能性もあります。

出力範囲全体を素早くスキャンするには:

  • ARRAYFORMULAが入力されたセル(例:B1)をクリックします。
  • Ctrl + Shift + End(Windows/Linux)またはCmd + Shift + End(Mac)を押して、シート内の最終使用セルにジャンプします。
  • 列内の空でないセルを目視で確認します。

目視確認の代わりに、Ctrl + Fを押して*「正規表現を使用して検索」*を有効にし、対象列内で.+を検索します。内容のあるすべてのセルがすぐに表示されます。

手順2 — ブロックしているセルをクリアする

該当セルを選択してDeleteキーを押します。Backspaceではありません。Deleteキーは行をずらさずにその場でコンテンツを削除するため、ここでの用途に適しています。

残しておきたいヘッダーがある場合は、配列の出力範囲より上に移動するか別の列にずらし、それに合わせて数式を修正してください。

**非表示のスペースに注意してください。**見た目は完全に空でも" "が含まれているセルがあります。クリックして数式バーを確認し、何か表示されたら削除してください。

手順3 — 数式を修正または再構成する

パスをクリアすれば、ARRAYFORMULAは自動的に展開されるはずです。それでも壊れている場合は、数式の範囲指定が誤っている可能性があります。

基本的な例 — 列を1.1倍にする

=ARRAYFORMULA(A2:A100 * 1.1)

この数式はB2:B100に結果を書き込みます。B1に数式を入力する前に、99個のセルすべてが空である必要があります。

オープンエンドの範囲を使用する

=ARRAYFORMULA(IF(A2:A="", "", A2:A * 1.1))

IF(A2:A="", "", ...)のラッパーにより、配列が列の無限下方向に空文字列を書き込むのを防ぎます。これを省略すると、Sheetsが数千行に空白値を展開してしまい、遠く下にデータが存在する場合に競合の原因になります。

同じ列にヘッダーを残す

B1に「Price」ラベルを置き、配列の出力をB2から始めたい場合は、ARRAYFORMULAをB1ではなくB2に入力します:

B1: Price
B2: =ARRAYFORMULA(IF(A2:A="", "", A2:A * 1.1))

ヘッダーが配列の範囲より上にあるため、競合は発生しません。

ヘッダーを数式内に組み込む

ヘッダーとデータの両方を一つの数式で処理することを好む人もいます:

=ARRAYFORMULA({"Price"; IF(A2:A="", "", A2:A * 1.1)})

{"Price"; ...}の構文は縦方向の配列を構築します。1行目がヘッダー文字列で、残りは計算データです。これをB1に入力し、その下のセルをすべて空にしておいてください。

手順4 — 「同じ列に2つのARRAYFORMULA」の対処

重複する行を競合する2つのARRAYFORMULAエントリがある場合、どちらか一方が必ず失敗します。一つの数式に統合するか、範囲が重ならないよう行を分割してください:

=ARRAYFORMULA(IF(ROW(A:A)=1, "Header", IF(A:A="", "", A:A * 1.1)))

一つの数式、一つの情報源。1行目にはヘッダーが入り、それ以外のすべての行には計算結果が入ります。

確認方法

ブロックしているセルをクリアして数式を調整した後:

  • 数式セルからエラートライアングルが消えます。
  • ソース列にデータを追加すると、結果が自動的に列に展開されます。
  • 出力範囲内のセルをクリックすると、展開範囲全体が水色の枠で強調表示され、数式バーには親数式がグレーアウト(配列制御のため読み取り専用)で表示されます。
  • ソース列に新しい値を入力すると、手動操作なしで結果が即座に表示されます。

まとめ

  • **配列は出力範囲を管理します。**配列が制御しているセルに直接入力しないでください。入力すると配列が壊れ、次回の数式再計算時に同じエラーが発生します。
  • **数式を書く前に列レイアウトを計画してください。**配列が使用する列を決め、数式セル以外はすべて空にしておきます。
  • オープンエンドの範囲はIFでラップしてください。A2:Aのような範囲にはIF(A2:A="", "", ...)のガードが必要です。省略すると、配列がシートのすべての行に空白値を展開してしまいます。
  • **列ごとにARRAYFORMULAは一つまで。**同じ列に複数の競合する配列があるとメンテナンスが煩雑になります。一つの数式に統合してください。

Related Error Notes