IMPORTRANGEが動かない・遅いときに見る順番

記事
IT・テクノロジー
別のスプレッドシートから数字を引っ張ってきたはずが、セルに #REF! しか出ない。
昨日までは動いていたのに、今日開いたら空欄になっている。
あるいはエラーは出ていないのに、シートを開くたびに数十秒フリーズする。

IMPORTRANGEはGoogleスプレッドシート特有の関数で、原因の候補が絞られています。
上から順番に見ていけば、だいたいどこかで当たります。

■ そもそもIMPORTRANGEは何をしているか

=IMPORTRANGE("スプレッドシートのURLまたはID", "シート名!範囲")

これは、指定したスプレッドシートをその都度開いて中身を読みに行く関数です。
自分のシート内で完結するVLOOKUPなどと違い、別ファイルへのアクセスが発生します。
このため、通常の関数にはない「権限」という壁があり、
シートを開くたびに参照先を読みに行くという「重さ」の性質を持ちます。
エラーの多くも、遅さの多くも、この2点から出ています。

■ 1番目に見る場所:権限の承認がまだ

IMPORTRANGEを式に入れた直後は、セルに #REF! が出て
「このシートへのアクセスを承認する必要があります」という表示が出ます。
セルをクリックすると「アクセスを許可」ボタンが出るので、これを押さないと
永久に動きません。

この承認は、数式を入れた人ではなく、ファイルを開いている人ごとに必要です。
自分が承認済みでも、共有相手が同じファイルを別アカウントで開くと、
その人の画面ではまた #REF! が出て、その人が承認を押す必要があります。
「自分の画面では動くのに、共有した相手の画面では動かない」という報告は、
ほぼこれが原因です。

一度承認すれば、その組み合わせ(参照元ファイル×参照先ファイル×閲覧者)は
以後承認不要になります。承認ボタンが出てこない場合は、
参照先のファイルへの閲覧権限自体がその人に無いことが多いです。

■ 2番目に見る場所:参照先のシートや範囲が変わった

IMPORTRANGEはシート名と範囲を文字列で指定しています。

=IMPORTRANGE("(参照先スプレッドシートのURL)", "売上!A1:D100")

参照先で「売上」というシート名を「売上_2026」に変更すると、
文字列としての一致が取れなくなり、#REF! になります。
シートを削除した場合も同じです。列の挿入・削除では起きませんが、
シート名の変更・削除だけは即座にエラーになります。

もう1つ、参照先のファイル自体を削除した、または自分がアクセス権を失った
場合も同じ #REF! が出ます。共有設定を見直した後や、
参照先ファイルのオーナーが変わった後に急に動かなくなったら、
まずここを疑ってください。

■ 3番目に見る場所:range指定の書き方

うまく動かないときに多いのが、範囲指定そのものの書き方です。

・シート名が半角スペースを含む → "売上 集計!A1:D10" のように
 シート名の前後に引用符は不要ですが、シート名自体にスペースがあっても
 そのままで通ります。動かない場合はシート名の完全一致をまず疑ってください。
 「売上」と「売上 」(末尾に全角スペース)は別物として扱われます。

・範囲だけ書いてシート名を省略する → "A1:D10" のように書くと、
 参照先の先頭のシートが対象になります。狙ったシートと違うシートが
 1枚目に来ていると、意図しないデータが返ります。

・列全体を指定する → "売上!A:D" のように書けること自体は問題ありませんが、
 これは次の「重さ」の項目に直結します。

■ 4番目に見る場所:更新のタイミング

IMPORTRANGEには、自動では即座に反映されないという性質があります。
参照先のデータを書き換えても、参照元のセルがすぐには追従せず、
数分から数十分遅れることがあります。これは仕様であり、故障ではありません。

急ぎで最新の値を反映させたい場合は、IMPORTRANGEの数式が入っているセルを
選択して一度削除し、Ctrl+Zで元に戻すと強制的に再取得されます。
範囲を1つ広げてすぐ戻す、という方法でも同様に再取得が走ります。

「さっき変更したのに反映されない」という相談のほとんどは、
故障ではなくこの遅延です。数分待ってから判断してください。

■ そもそもIMPORTRANGEを使うべきでない場面

ここまでの4つを避けても、IMPORTRANGEには参照先を毎回丸ごと読みに行く
という重さが残ります。特に次の状況では、使わない方が安定します。

・同じシート内で、同じ参照先へのIMPORTRANGEを何個も書いている
 → 参照先を読む回数がそのまま数式の数だけ増えます。
 1つのセルでまとめて取得し、他のセルはその結果をQUERYやFILTERで
 絞り込む形にすると、参照先へのアクセスは1回で済みます。

・参照先のシートが数万行を超える
 → 範囲を絞っていても、Googleスプレッドシートの内部処理では
 参照先シート全体の読み込みが発生しやすく、動作が重くなります。
 必要な列・行だけをあらかじめ別シートに切り出し、
 その切り出したシートを参照先にする方が軽くなります。

・リアルタイム性が必要
 → 前述の反映遅延があるため、入力してすぐ他部署が見るような
 用途には向きません。この場合はGASでの定期同期や、
 直接同じファイル内にシートを作る構成のほうが確実です。

■ よくある組み合わせ事故:シート名変更とアクセス権限が同時に起きたとき

実際に相談が多いのは、単独の原因ではなく複数が重なったケースです。
たとえば「参照先のシート名を変更した」うえに「参照先ファイルの
共有範囲を見直して、閲覧者を絞った」というように、
似た時期に2つの変更が重なると、#REF! の原因がどちらか分からなくなります。

この場合の切り分け方は、参照先のファイルを別のブラウザプロファイルか
シークレットウィンドウで、共有相手のアカウントを想定して開き直すことです。
自分のアカウントでは権限があるため見えてしまい、
「権限は問題ない」と誤判断しやすいので、実際に困っている人と
同じ立場で確認するのが確実です。

■ やってはいけないこと

#REF! が出るたびに、数式を作り直すこと。
権限の承認漏れが原因の場合、数式自体は正しいので、
消して書き直しても同じ場所でまた止まります。まず承認ボタンの有無を確認してください。

IMPORTRANGEの結果をコピー&ペーストで値に固定して、元の数式を消してしまうこと。
一時的には軽くなりますが、参照先が更新されても二度と反映されなくなります。
固定したい場合は、数式は残したまま別列に「値貼り付け」で複製する形にしてください。

■ それでも解決しないとき

・承認もシート名も合っているのに、#REF! が消えない
・複数のIMPORTRANGEが絡み合っていて、どれが重さの原因か分からない
・参照先のファイルが誰の管理か分からず、権限を確認する相手がいない

このあたりまで来たら、参照の構造を図にしながら1本ずつ追った方が早いです。

私はスプレッドシート間の参照構造の調査と整理を承っています。
どのファイルがどこを参照しているかを一覧にしてお返ししています。

――
この記事の執筆には生成AIを活用しています。内容は実際の挙動を確認して書いています。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す