ADVERTISEMENT

【Googleスプレッドシート】複数のIMPORTRANGEを連結!データ統合のベストプラクティス

【Googleスプレッドシート】複数のIMPORTRANGEを連結!データ統合のベストプラクティス
🛡️ 超解決

複数のスプレッドシートからデータを集めて1つのシートに統合したいとき、IMPORTRANGE関数を何度も使う方法ではシートが重くなり、更新も遅くなりがちです。特に、元データの行数が増えるたびに個別のIMPORTRANGEを調整する手間も発生します。この記事では、複数のIMPORTRANGEを効率的に連結する方法を、具体的な関数の組み合わせとともに解説します。縦方向や横方向の連結、QUERY関数を使ったフィルタリングまで、現場で使えるベストプラクティスをご紹介します。

【要点】複数IMPORTRANGEを1つにまとめるテクニック

  • QUERY + {} で縦連結: =QUERY({IMPORTRANGE(…); IMPORTRANGE(…)}, “SELECT * WHERE Col1 IS NOT NULL”) で複数シートのデータを縦に積み上げます。
  • {} で横連結: ={IMPORTRANGE(…), IMPORTRANGE(…)} で列方向に結合でき、列数が異なる場合はエラーになるため注意が必要です。
  • ARRAYFORMULA で列を補完: =ARRAYFORMULA(IF(ISBLANK(A2:A), , IMPORTRANGE(…))) のように条件付きで読み込むことで、不要なセルの読み込みを抑えます。

ADVERTISEMENT

IMPORTRANGEを連結する前に知っておくべき仕組み

IMPORTRANGE関数は他のスプレッドシートからデータをインポートする便利な関数ですが、1回の関数呼び出しで1つの範囲しか指定できません。複数のファイルやシートからデータを集めるには、複数のIMPORTRANGEを記述し、それらを配列リテラル({})やQUERY関数で結合する必要があります。ただし、IMPORTRANGEには読み込み制限があります。1つのスプレッドシートで大量のIMPORTRANGEを使うと、再計算が遅くなったり、セルあたりの文字数制限に引っかかったりします。連結時の最大のポイントは、無駄なセルを読み込まないことと、結合後のデータをシンプルに保つことです。また、IMPORTRANGEは最初のアクセス時に権限承認が必要です。連結前に各シートのインポートが正常に動作していることを確認しましょう。

複数のIMPORTRANGEを縦方向に連結する手順

異なるシートから同じ構造のデータを縦に並べたい場合、QUERY関数と配列リテラルの組み合わせが最もシンプルです。以下の手順で行います。

  1. 各IMPORTRANGEが正常に動作するか確認する
    まず、個別のIMPORTRANGEをセルに入力し、権限を承認します。例えば、=IMPORTRANGE(“スプレッドシートURL”, “シート1!A:F”) のようにします。データが表示されれば準備完了です。
  2. QUERY関数を記述する
    新しいセルに以下の数式を入力します。
    =QUERY({IMPORTRANGE("URL1", "Sheet1!A:F"); IMPORTRANGE("URL2", "Sheet1!A:F")}, "SELECT * WHERE Col1 IS NOT NULL")
    セミコロン(;)は縦方向の結合を意味します。WHERE句で空行を除外することで、データが途切れなく表示されます。
  3. 列数を統一する
    すべてのIMPORTRANGEで同じ列数・順序になっていることを確認します。列数が異なるとQUERYがエラーになります。もし列数が違う場合は、QUERYのSELECT句で列をそろえるか、ARRAYFORMULAで補完します。

複数のIMPORTRANGEを横方向に連結する手順

異なるデータを横に並べたい場合は、配列リテラルをカンマでつなぎます。ただし、行数が一致していないとエラーになるため、事前に行数をそろえる工夫が必要です。

  1. 両方の行数をそろえる
    行数が少ない方のIMPORTRANGEに空行を追加するか、QUERYで行数を制限します。例えば、下記のように行数を固定します。
    =IMPORTRANGE("URL", "Sheet1!A1:A10") のように範囲を指定するか、QUERYで行数を絞ります。
  2. 横連結の数式を入力する
    カンマ区切りで配列を結合します。
    ={IMPORTRANGE("URL1", "Sheet1!A1:A10"), IMPORTRANGE("URL2", "Sheet1!B1:B10")}
    これで、左側のデータと右側のデータが横に並びます。
  3. 列数が不揃いの場合はQUERYで調整
    列数が異なる場合、QUERY関数のSELECT句で特定の列だけを抽出してから結合します。例えば、=QUERY(IMPORTRANGE(...), "SELECT Col1, Col2, Col3") とすると3列に統一できます。

ADVERTISEMENT

QUERYとARRAYFORMULAを組み合わせた高度な連結

IMPORTRANGEを複数使うと、空白セルまでインポートしてシートが重くなることがあります。ARRAYFORMULAとIFを組み合わせて、必要な行だけ読み込むテクニックを紹介します。

条件付きインポートで無駄を減らす

元データの特定の条件を満たす行だけをインポートしたい場合は、QUERYのWHERE句を使います。例えば、IMPORTRANGEで取得した範囲に対してQUERYをかける方法です。
=QUERY(IMPORTRANGE("URL", "Sheet1!A:F"), "SELECT * WHERE Col1 = '東京'")
これで、東京のデータだけを抽出できます。複数のIMPORTRANGEを連結する場合も、各QUERYの結果を配列リテラルで結合します。

ARRAYFORMULAで自動的に行数を拡張する

IMPORTRANGEは参照範囲が固定されがちですが、ARRAYFORMULAを使うと元データが増えたときに行数が自動拡張されます。例えば、=ARRAYFORMULA(IMPORTRANGE("URL", "Sheet1!A:F")) とすると、元データの増減に追従します。ただし、この方法は大量データでは遅くなることがあるため、QUERYとの併用をおすすめします。

連結時に起こりやすいトラブルとその対処法

#REF!エラーが表示される

原因は、IMPORTRANGEの権限が承認されていないことです。まず各IMPORTRANGEを単独でセルに入力し、権限承認のプロンプトに従ってアクセスを許可してください。承認後は数式を連結に変更しても問題なく動きます。

データが表示されずに空白になる

IMPORTRANGEのURLまたはシート名・範囲が間違っている可能性があります。ダブルクォーテーションで囲まれたURLが正しいか、シート名にスペルミスがないかを確認します。また、インポート元のシートが削除されていないかもチェックしてください。

QUERYで「No matches」エラーが出る

QUERYのWHERE句で条件が厳しすぎるか、列指定が誤っています。WHERE句の条件を緩めてまず全体を表示し、その後条件を絞り込みます。また、IMPORTRANGEの結果は文字列として扱われるため、数値の比較は注意が必要です。

横連結で「#N/A」が大量に出る

横連結する配列の行数が一致していないと、足りない行に#N/Aが表示されます。行数が多い方に合わせて、少ない方をARRAYFORMULAやQUERYで拡張するか、IFERRORで#N/Aを空白に変換します。=ARRAYFORMULA(IF(ISBLANK(A1:A), , B1:B)) のようにして、元データの行数を基準に表示できます。

縦連結と横連結の比較

連結方向 使用関数 メリット デメリット
縦方向 QUERY + {} 構造が同じデータを簡単に積み上げられる 列数が異なるとエラーになる
横方向 {} カンマ区切り 異なる種類のデータを並べて比較できる 行数をそろえる必要があり、空白処理が煩雑
縦+横 (複合) QUERY + {} を入れ子 柔軟なデータ統合が可能 数式が複雑で管理が難しくなる

まとめ

複数のIMPORTRANGEを連結するには、QUERY関数と配列リテラルを組み合わせるのが最も実用的な方法です。縦方向にはセミコロン、横方向にはカンマを使い分け、QUERYのWHERE句で不要なデータを除外することで、軽量なデータ統合が実現できます。連結前に個別のIMPORTRANGEが正しく動作することを確認し、列数や行数のずれに注意すれば、エラーも最小限に抑えられます。さらに、ARRAYFORMULAやIFERRORを組み合わせることで、より堅牢なシートに仕上げられます。このテクニックを応用して、複数ソースからのデータ集計やレポート作成を効率化してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。