Google SheetsのIMPORTRANGEで「Error: Result too large」を修正する方法

beginner📗 Google Sheets2026-06-01| Google Sheets(ウェブブラウザ、OS不問)— Google Workspace / 個人Googleアカウント

Error Message

Error: Result too large
#google-sheets#importrange#limit

何が起きているか

別のスプレッドシートからデータを取得するために IMPORTRANGE 数式を追加したところ、データの代わりに以下のエラーが表示されています:

Error: Result too large

Google スプレッドシートは1つのスプレッドシートあたり1,000万セルの上限があります。IMPORTRANGE はそれよりずっと手前で独自の制限に達します — 通常は100〜200万セル前後、または返される配列が宛先シートに対して幅や高さが大きすぎる場合です。

よくあるトリガーは以下のとおりです:

  • 数百列・数千行のシート全体をインポートしている(例:Sheet1!A:ZZ
  • 数式を最初に設定してから、ソーススプレッドシートのデータが大幅に増加した
  • 行・列の制限なしに IMPORTRANGE を QUERY や FILTER の中にネストしている
  • 1つのシート内の複数の IMPORTRANGE 呼び出しが合計で上限を超えている

デバッグ手順

ステップ1:範囲が何セルをカバーしているか確認する

ソーススプレッドシートを開き、実際にインポートしている量を確認します。A:Z のような開放的な範囲を使用している場合は、列数に行数を掛けてください。

=IMPORTRANGE("spreadsheet_url", "Sheet1!A:Z")

50,000行・26列のソースは130万セルになります。これはすでに上限に近づいています。

ステップ2:宛先シートの既存データを確認する

IMPORTRANGE が何かを追加する前に、宛先シートがすでに1,000万セルの上限に近づいている可能性があります。10,000行 × 1,000列のシートはすでに1,000万セルに達しており、余裕がありません。行数と列数を手動で、または拡張機能 → Apps Script から確認してください。

ステップ3:より小さい範囲でテストする

小さなスライスに絞り込んで、IMPORTRANGE 自体が動作するか確認します:

=IMPORTRANGE("spreadsheet_url", "Sheet1!A1:D100")

データが返ってきた場合、問題は範囲のサイズです — 権限の問題でも URL の誤りでもありません。

解決策

解決策1:範囲を明示的に制限する(最速の修正)

開放的な列参照を境界付きの範囲に置き換えます。すべてを取得するのをやめましょう:

// 修正前 — 列AからZのすべての行を取得
=IMPORTRANGE("spreadsheet_url", "Sheet1!A:Z")

// 修正後 — 行1〜5000、列A〜Fのみ取得
=IMPORTRANGE("spreadsheet_url", "Sheet1!A1:F5000")

行と列の境界を、ソースデータが実際に含むものに合わせて設定してください — 将来含むかもしれないものではなく。

解決策2:IMPORTRANGE の内側で QUERY を使ってフィルタリングする

IMPORTRANGE を QUERY で囲み、必要な列と行だけを取得します。1つの数式でフィルタリングと行制限の両方を処理できます。

// 列3が空でない行から、列1、2、5のみインポート
=QUERY(
  IMPORTRANGE("spreadsheet_url", "Sheet1!A:E"),
  "SELECT Col1, Col2, Col5 WHERE Col3 <> '' LIMIT 2000"
)

3つの QUERY 句が重い処理を担います:

  • SELECT Col1, Col2 — 不要な列を除外する
  • WHERE Col1 <> '' — 空白行をスキップする
  • LIMIT 1000 — 返される行数のハードキャップ

解決策3:インポート前に FILTER で行数を削減する

条件に一致する行だけが必要な場合、FILTER で結果を大幅に削減できます:

// 列Cが"Active"の行のみインポート
=FILTER(
  IMPORTRANGE("spreadsheet_url", "Sheet1!A1:F5000"),
  IMPORTRANGE("spreadsheet_url", "Sheet1!C1:C5000") = "Active"
)

**注意:**各 IMPORTRANGE 呼び出しはクォータに対して個別にカウントされます。パフォーマンスが低下した場合は、QUERY アプローチに切り替えてください — 1回の呼び出しですべてを処理できます。

解決策4:複数のシートにインポートを分割する

すべてのデータが本当に必要な場合は、列グループで分割します。宛先ファイルに2つのシートを作成します:

// シート: Import_Part1
=IMPORTRANGE("spreadsheet_url", "Sheet1!A:M")

// シート: Import_Part2
=IMPORTRANGE("spreadsheet_url", "Sheet1!N:Z")

そして、IMPORTRANGE を再度呼び出す代わりに、分析シートでそれらのシートを直接参照してください — Import_Part1!A:M

解決策5:ソーススプレッドシートで事前にフィルタリングする

ソースファイルを所有している場合は、そこでフィルタリングを行います。専用の「Export」シートを追加し、QUERY 数式を入れます:

// ソーススプレッドシート内 — "Export"という名前のシート
=QUERY(RawData!A:Z, "SELECT A, B, C, D WHERE A <> '' LIMIT 3000")

// 宛先スプレッドシートで:
=IMPORTRANGE("source_spreadsheet_url", "Export!A:D")

ソースファイルが処理を担います。宛先は生データのダンプではなく、すでにフィルタリングされた小さな結果をインポートするだけです。

確認手順

  • 修正を適用します — 範囲の制限、QUERY、または FILTER。
  • 10〜20秒待ちます。IMPORTRANGE にはネットワークの遅延があります。再計算する時間を与えてください。
  • セルにローディングスピナーが表示され、その後データが表示されるはずです(エラーではなく)。
  • 行数を確認します:=ROWS(IMPORTRANGE(...)) — 期待値と一致しているか検証してください。
  • 宛先の合計セル数を確認します:行数 × 列数 が1,000万を大きく下回っていることを確認してください。

範囲を制限してもエラーが続く場合は、新しいスプレッドシートを作成してそこで IMPORTRANGE をテストしてください。新しいファイルで動作する場合、宛先シートにクォータの問題がある可能性が高いです。

得られた教訓

  • 開放的な列範囲は罠です。 Sheet1!A:Z は無害に見えますが、シートが将来持つすべての行を取得します — まだ追加していない将来の行も含めて。
  • QUERY が最も長期的にクリーンな修正です。 結果がシートに届く前に行と列の両方をフィルタリングします。無駄なセルもなく、ソースが成長しても突然壊れることもありません。
  • ソースシートの成長が動作中の数式を壊します。 500行で問題なく動いていた数式が50,000行で失敗します。ハードな行制限を追加しましょう — LIMIT 5000 や固定の行番号など — そうすれば成長を早期に検知できます。
  • 同じ範囲の IMPORTRANGE 呼び出しを重複させないようにしましょう。 FILTER 内では各呼び出しがクォータに対して個別にカウントされます。QUERY を使って1回の呼び出しに統合してください。

Related Error Notes