Googleスプレッドシートの公式ロゴマークとスプレッドシート画面

広告 オフィス・ドキュメント

【解決】スプレッドシートのIMPORTRANGE関数が重い原因と高速化のコツ

Googleスプレッドシートを日々の業務で活用する中で、他のスプレッドシートからデータを自動で引っ張ってくることができる「IMPORTRANGE(インポートレンジ)関数」は、誰もが一度は使ったことがある、あるいは目にしたことがある便利な機能ですよね。別の部署が更新している売上管理シートや、プロジェクトメンバーが入力している進捗確認シートなど、異なるファイルに分散している情報を1つのシートに集約してダッシュボード化するには欠かせない機能です。

しかし、この非常に強力なIMPORTRANGE関数ですが、インポートするデータの行数や列数が膨大になったり、シート内のいたるところでこの数式をコピーして多用したりすると、スプレッドシートの動作が急激に重くなる最大のボトルネックになってしまうのですよ。この記事では、IMPORTRANGE関数がなぜこれほどまでにシートを重くしてしまうのか、その裏側の仕組みやスプレッドシートの仕様、そして具体的な解決策について、詳しく掘り下げてお話ししていきますね。

記事のポイント

  • IMPORTRANGE関数は別ファイルからリアルタイムにデータを取得する便利な機能であること
  • 通常のセル参照と異なりGoogleサーバーと直接API通信を行うため通信負荷が高いこと
  • 同じファイルを何度も関数で呼び出すと処理が追いつかずフリーズの原因になること
  • データ専用のマスターシートを作成してインポートを1箇所に集約するのが効果的であること

IMPORTRANGE関数が重くなる仕組みとスプレッドシートの仕様

IMPORTRANGE関数が重くなる仕組みとスプレッドシートの仕様

共有のスプレッドシートを使っていて、シート全体のスクロールや値の入力が急に重くなることがあります。その場合、シートの数式を確認してみると、別ファイルからデータを読み込むIMPORTRANGE関数がいくつも仕込まれているケースが多々あります。

IMPORTRANGE(インポートレンジ)関数の基本的な役割

改めて、IMPORTRANGE関数がどのような役割を持っているのか、その基本的な定義と挙動から確認しておきましょう。この関数は、現在開いているスプレッドシートとは完全に別のファイルとして保存されているスプレッドシートの、指定したシート名およびセル範囲のデータを動的に引っ張ってくるための数式です。

補足

【IMPORTRANGE関数の基本構文】
=IMPORTRANGE ("スプレッドシートのURL", "シート名!セル範囲")
参照したい外部ファイルのURLと、取得したいシート名・セル範囲をダブルクォーテーションで囲んで入力します。

この関数の素晴らしいところは、何と言っても「参照元のファイルでデータが変更されると、参照先のシートでもその変更が自動的かつリアルタイムに反映される」という連携力です。

もしIMPORTRANGE関数の詳細な書き方やエラー時の対処法など、公式の正確な仕様を確認したい場合は、最新の仕様については公式サイトもご確認ください。

スプレッドシートと外部ファイルを繋ぐ通信負荷の仕組み

なぜIMPORTRANGE関数を使うとスプレッドシートが重くなるのかというと、通常のファイル内でのセル参照と、IMPORTRANGE関数による参照とでは、データを読み込むためのアプローチと必要な通信プロセスが全く異なるからです。

同一ファイル内の別シートを参照する場合(例えば、=Sheet2!A1のような数式)、通信を伴わないため、処理時間はミリ秒単位であり、動作が遅くなることはほとんどありません。一方、IMPORTRANGE関数の場合は、スプレッドシートがインターネットを経由してGoogleのサーバーにアクセスし、別の場所に保存されているファイルからデータを引っ張ってくるAPIリクエストを毎回裏側で送信しているのですよ。

ポイント

特に危険なのが、同じシートの中で何十箇所、何百箇所もIMPORTRANGE関数を使っている状態です。たくさんのセルに個別にIMPORTRANGE関数を書き込んでしまうと、シートを開いた瞬間に数百回ものAPIリクエストが同時に送信されてしまいます。

IMPORTRANGE関数が重くなる5つの主な原因

IMPORTRANGE関数が重くなる主な原因

IMPORTRANGE関数はとても便利で、社内のデータベースや別部署の売上シートから最新情報を自動で引っ張ってくるのに大活躍しますよね。ですが、使い方を誤るとスプレッドシートが急に重くなってしまい、作業効率がガクンと落ちてしまいます。

KYO
KYO
私も以前、社内の各部門から売上データを集計する際、便利だからとIMPORTRANGE関数を同一シートに50箇所以上も設定してしまいました。その結果、社長が出席する会議の直前にデータの再計算ループが止まらなくなって画面が固まり、冷や汗をかきながら手作業で数値をメモした苦い経験があります。

原因1:参照元のデータ量が多すぎる・範囲指定が広すぎる

まず最初に疑うべき原因は、「参照元(インポート元)のスプレッドシートにあるデータ量そのものが多すぎる」という点です。

やってしまいがちなのが「列全体を曖昧に指定する」という書き方です。たとえば =IMPORTRANGE ("URL", "シート1!A:Z") のように書いてしまうと、現在データがない空のセルも含めて数万行分すべてを読み込みの対象としてスキャンしようとするため、通信量も増えて膨大な時間がかかってしまいます。

原因2:IMPORTRANGE関数をシート内に大量に並べている

次によくある原因が、「IMPORTRANGE関数をシート内に大量に並べている」というケースです。1つのインポート処理が遅延すると、それを参照している他の数式の計算もすべてストップしてしまいます。

この問題を避けるためには、細切れに何回もIMPORTRANGE関数を呼び出すのではなく、「大きめの範囲で一度にドカンとインポートして、必要なデータはスプレッドシートのローカル関数で切り出す」というアプローチが極めて有効です。

原因3:揮発性関数(TODAY, NOWなど)との組み合わせ

3つ目の原因は、「IMPORTRANGE関数と揮発性関数を組み合わせて使っている」場合です。TODAY()などの関数は、シート内のどこか1箇所を書き換えるたびに、あるいは数分おきに、強制的に再計算を実行します。これを組み合わせると、シートを触るたびに毎回外部シートへのアクセスとデータ取得が最初から実行されてしまいます。

原因4:インポートしたデータに対する「条件付き書式」の過剰な適用

4つ目の原因として挙げられるのが、「インポートしたデータに対して、条件付き書式や配列数式(ARRAYFORMULA)を過剰に適用している」というケースです。これもシートの描画速度や計算速度に大きな影響を与えます。

原因5:同一ファイルへの「同時アクセス(リクエスト)」の集中

最後の5つ目の原因は、「同一の参照元スプレッドシートに対する同時アクセスの集中」です。社内のマスターデータなどに複数のファイルから一斉にIMPORTRANGEでリクエストが集中すると、Googleのサーバーが処理しきれずにエラーを引き起こしてしまいます。

スプレッドシートを軽くする!IMPORTRANGE高速化の解決策

スプレッドシートを軽くするIMPORTRANGE高速化の解決策

実は、IMPORTRANGE関数の計算負荷を下げるためには、いくつかの定番のテクニックが存在します。ちょっとした書き方の工夫や運用の見直しを行うだけで、それまでの重さが嘘のように解消され、サクサクと快適に動くようになることも珍しくありません。

解決策1:データ専用の「マスターシート」を作成し参照を1箇所に集約する

まず最初に見直したいのが、「同じファイルを何度もIMPORTRANGE関数で呼び出していないか」という点です。

この問題を一発で解決するのが、データ専用の「マスターシート」を作成し、参照を1箇所に集約するという方法です。

補足

やり方はとてもシンプルで、新しく「データ読み込み用」の専用タブを作成し、そこにIMPORTRANGE関数を1つだけ記述します。VLOOKUP関数などを使う計算用シート側では、外部URLを参照するのではなく、そのローカルの専用タブを参照するように数式を書き換えます。

このように工夫するだけで、外部との通信は専用タブにある「たった1つのIMPORTRANGE関数」だけで完結します。他のセルはすべてスプレッドシート内部のローカルな参照になるため、動作速度が大幅に向上します。

解決策2:範囲の指定を具体化して余分な空欄の読み込みを避ける

次に試したいのが、「IMPORTRANGEで取得する範囲の最適化」です。「A:Z」のように行数を指定しない書き方をすると、その下にある大量の空欄まですべて読み込み対象として扱ってしまいます。

この無駄な読み込みを防ぐためには、範囲の行数や列数をできるだけ具体的に数値で指定するのが最も効果的です。例えば、=IMPORTRANGE ("URL", "売上明細!A1:G1000") のように明確に上限を区切ることで、読み込むセル数を最小限に抑えることができます。

解決策3:GASを使って「値のみ」を定期的にコピーする

データ量が非常に多い場合や、リアルタイム性がそこまで求められない場合は、IMPORTRANGE関数の使用をやめ、Google Apps Script (GAS) を活用してデータを定期的に「値のみ」コピー&ペーストする方法への切り替えがおすすめです。

15分〜1時間おきにデータをコピーするスクリプトを設定すれば、シートを開くたびに通信や再計算が行われることがないため、シートの動きが大幅に軽くなります。チームの運用に合わせてぜひ検討してみてくださいね。

  • この記事を書いた人

KYO

現役のシステムエンジニア。普段は企業向けの開発やツールの自動化を専門にしています。データの仕組みを知り尽くしたプロの視点から、スプレッドシートやExcel、Notion、AIツールの「本当に役立つ時短テクニック」を初心者向けに分かりやすく解説中!

-オフィス・ドキュメント