自分を活かして 相手を活かして 今を活かす

【解決】IMPORTRANGE関数で「結果が大きすぎます」エラーになる3つの要因〜条件によっては、同じセル数の範囲を参照してもエラーになる場合とならない場合がある〜

こんにちは、おかちゃんせんせいです!

再びIMPORTRANGE関数で予期せぬエラーに遭遇したため、その要因と解決方法について備忘もかねて整理します。

【解決】Googleスプレッドシートで「配列結果は自動的に展開されませんでした」エラーを回避する方法

◆お知らせ◆

【まとめ記事】

現在、これまで書いてきた記事をテーマ別にまとめています。

詳しくはこちらから

IMPORTRANGE関数で「結果が大きすぎます」エラーになる3つの要因

どんな時に発生するエラー?

ネット上で「結果が大きすぎます」と表示される原因や対策はたくさんヒットします。

共通している原因として挙げられているのが、
参照するデータ数が非常に多い場合
です。

しかし、厄介なのが具体的にどのくらいのデータ(セル)数を参照するとエラーになるかは公開されていないため、線引きについてはまだ判明されていないようです。

(補足)
5000行・50万セルをIMPORTRANGEで読み込むと正常に動作しなくなると書いている記事もあります。

検証1:参照データ範囲を同じにする

ただ、私が検証した限りでは、
単純に参照したデータ数だけに依存していないこと
は確かです。

【検証データ①】

<参照元セル範囲>
スプレッドシートA:18万行×12列=216万セル
スプレッドシートB:18万行×12列=216万セル
※どちらも関数なし
※AとBの参照データはまったく同じデータ

<参照先>
スプレッドシートC:スプレッドシートAを参照⇒エラー
スプレッドシートD:スプレッドシートBを参照⇒正常に表示

つまり、参照元のデータ数が同じであってもエラーになる場合と、エラーにならない場合があるということ。
ということは、参照したデータ数以外が要因の可能性が濃厚です。

では、厳密にスプレッドシートAとBが同じかというと、そうではありません。
スプレッドシートAの方には、別シートにも同じデータがバックアップとして入力されています。
一方でスプレッドシートBには1つのシートしか使っていません。

そこで疑ったのは、スプレッドシートAのシート全体はスプレッドシートの上限数である1,000万セルの半分近く使用していること。
それによって、スプレッドシートAを参照しようとするとIMPORTRANGE関数が正常に動作しなくなるのではないか、と。

そうだとしたら、Aよりはシート全体で表示されているセル数の少ないBを参照するとエラーにならなかった理由が説明できます。

検証2:参照する列を変えてみる

あと、なぜ1,000万セルの半分にも満たないデータを参照してエラーになってしまった件ですが、
検証した結果では
表示形式が日付のものが他の表示形式のものと比べてデータが大きく扱われる
ということ。

たとえば、日付以外のものを複数参照してもエラーにならないのに、日付(時間)の列を一列だけIMPORTRANGE関数で参照しようとしたらエラーになりました。

最初は文字数かと考えましたが、文字列の方が文字数が多いケースがあるので、文字数ではないと思われます。

【検証データ②】

<参照元セル>
A〜C列:表示形式が「日付」以外
F列:表示形式が「日付」

<エラーにならないケース>

=QUERY({
IMPORTRANGE(スプレッドシートID,”all!A:C”)
},”select *”)

<エラーになるケース>

=QUERY({
IMPORTRANGE(スプレッドシートID,”all!F:F”)
},”select *”)

検証3:エラーを回避する方法

さらに検証した結果、日付のある列をQUERY関数を用いて縦に分割して参照したところ、エラーなく表示されました。

【検証データ②】

<参照元セル>
F列:表示形式が「日付」

<エラーにならないケース>

=QUERY({
IMPORTRANGE(スプレッドシートID,”all!F1:F10000″);
IMPORTRANGE(スプレッドシートID,”all!F10001:F20000″)
},”select *”)

<エラーになるケース>

=QUERY({
IMPORTRANGE(スプレッドシートID,”all!F:F”)
},”select *”)

ということは、以上の検証結果からやはり日付データがエラーの要因の一つになっていたということになります。
→分割したことで正常に動作したということは、エラーになるデータ(セル)があったわけではない。

日付データの方がデータ量が大きく認識されているかもしれません。

もちろん何も考えずに、複数列ある場合には列分割してQUERY関数で横に結合したり、今回のように行分解してQUERY関数で縦に結合したりするのも一つの手かもしれません。


しかし、もしそれでもエラーがなかなか回避できない場合は、日付列があるかどうか確認が必要のようです。

まとめ

まさか日付であることが問題だと気付かず、確認に3時間以上使ってしまいました。

日付列をまったく参照していなくてもエラーになってしまう場合には、もっと細かく分割するか、データの構成を考え直した方がエラーと格闘する時間を最小限に留めることができるかもしれません。

IMPORTRANGE関数で「結果が大きすぎます」と表示される3つの要因

・単純に参照するデータ数が非常に多い場合

・参照先のGoogleスプレッドシートの使用セル数

・参照列に「日付」データがある場合

まだまだGoogleスプレッドシートを理解しきれていないことが多いので、これからも何か躓くことがあって、検証して、解決したことができましたらシェアしますね。



最後まで読んでいただき、ありがとうございました!


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA