ADVERTISEMENT

【Googleスプレッドシート】複数シートをQUERYで統合!{}構文での縦結合

【Googleスプレッドシート】複数シートをQUERYで統合!{}構文での縦結合
🛡️ 超解決

複数のシートに分かれた同じ形式のデータを1つにまとめたいと思ったことはありませんか。手作業でコピー&ペーストを繰り返すのは時間がかかり、更新のたびに手間が生まれます。GoogleスプレッドシートのQUERY関数と{}(波括弧)構文を使えば、複数シートを自動的に縦方向に結合できます。この記事では、{}構文を用いたQUERYでの縦結合方法を具体例とともに解説します。

【要点】QUERY関数の{}構文で複数シートを縦結合する方法

  • ={シート1!範囲; シート2!範囲} の基本構文: セミコロンで区切ることで、複数シートのデータを縦に積み重ねます。
  • QUERY関数と組み合わせてフィルタリング: =QUERY({A!A:C; B!A:C}, “where Col1 is not null”) のように、結合後に条件を指定できます。
  • 列数が一致しない場合はエラー: すべてのシートで同じ列数が必要です。列数が違う場合は、列を追加して揃える必要があります。

ADVERTISEMENT

{}構文で複数シートを縦結合する仕組み

QUERY関数は、データ範囲に対してSQLライクなクエリを実行できる強力な関数です。{}(波括弧)構文を使うと、複数の範囲を1つの配列として結合できます。縦方向に結合するには、各範囲をセミコロン(;)で区切ります。例えば、={‘シート1’!A:C; ‘シート2’!A:C} と記述すると、シート1のA列からC列のデータの下に、シート2の同じ列のデータが追加されます。この配列をQUERY関数のデータ範囲として指定することで、統合されたデータに対してフィルタリングや並び替えなどを行えます。ただし、すべての範囲で列数が同じでなければエラーになります。

複数シートをQUERYで縦結合する手順

ここでは、3つのシート(シート1、シート2、シート3)に同じ列構成(A列:日付、B列:商品名、C列:金額)のデータが入っている場合を例に、{}構文で縦結合する手順を説明します。

  1. 統合用のシートを用意する
    新しいシートを作成し、統合結果を表示する場所を決めておきます。通常はA1セルから始めるとよいでしょう。
  2. {}構文で範囲を結合する
    統合用シートのA1セルに次の数式を入力します。 ={‘シート1’!A:C; ‘シート2’!A:C; ‘シート3’!A:C} これで3つのシートのデータが縦に結合されます。シート名にスペースや記号が含まれる場合は、シート名をシングルクォーテーションで囲みます。
  3. QUERY関数でラップする
    結合したデータに対してQUERY関数を使って、不要な行を除外したり、並び替えたりします。例えば、ヘッダー行が重複する場合、2行目以降のヘッダーを除外するには次のようにします。 =QUERY({‘シート1’!A:C; ‘シート2’!A:C; ‘シート3’!A:C}, “where Col1 is not null offset 1”, 0) ここで offset 1 は最初の行(ヘッダー)をスキップする指定です。ただし各シートにヘッダーがある場合、最初のシートのヘッダーだけ残し、他は除外する工夫が必要です。
  4. 結果を確認する
    数式が正しく入力されていれば、統合されたデータが一覧表示されます。元のシートのデータを更新すると、統合結果も自動的に反映されます。

{}構文で統合する際の注意点とよくあるトラブル

列数が異なるシートがある場合のエラー

各シートの列数が異なると、#VALUE! エラーが発生します。例えば、シート1がA:C(3列)、シート2がA:B(2列)だと結合できません。この場合は、列数が少ないシートに空白の列を追加して揃えてください。または、範囲指定を列単位で調整する方法もあります。

ヘッダー行が重複する問題

各シートにヘッダー行がある場合、単純に結合するとヘッダーが何度も表示されます。これを防ぐには、QUERYのwhere句やlimit句を使って、2シート目以降のヘッダーをスキップします。例えば、1シート目のヘッダーをそのまま使い、2シート目以降はデータ行のみを含む範囲を指定する方法があります。具体的には、2シート目の範囲を A2:C のように2行目から始めることでヘッダーを除外できます。

空白セルや日付の扱いに関する注意

結合後に空白セルが混在する場合があります。QUERY関数のwhere句で “where Col1 is not null” と指定すると、空白行を除外できます。また、日付がシリアル値として表示される場合は、表示形式を日付に設定すると見やすくなります。

シート名に特殊文字が含まれる場合の対処

シート名にスペースや記号(-、&など)が含まれると、{}構文でエラーになります。その場合はシート名をシングルクォーテーションで囲みます。例: {‘売上データ 2023’!A:C; ‘売上データ 2024’!A:C}

ADVERTISEMENT

QUERYの{}構文と他の統合方法の比較

方法 特徴 柔軟性 自動更新 学習コスト
{}構文+QUERY 複数シートを1つの配列に結合し、クエリで加工可能 高い(フィルタ、並び替え、列選択など) あり(元データ更新で自動反映) 中級({}構文とQUERYの知識が必要)
手動コピー&ペースト シート間でデータを手作業で貼り付け 低い(手間がかかる) なし(再コピーが必要) 低い(誰でも可能)
IMPORTRANGE関数 別のスプレッドシートからデータを読み込む 中程度(別ファイルの統合に特化) あり(一定間隔で再読み込み) 低い(権限設定が必要)
QUERY単体+範囲指定 =QUERY(シート1!A:C; “…”) などシートごとに別々の数式を使う 低い(統合はできない) あり(ただし個別) 中程度

まとめ

この記事では、QUERY関数の{}構文を使って複数シートを縦方向に結合する方法を解説しました。{}構文で範囲をセミコロンで区切ることで、簡単にデータを積み重ねられます。また、QUERY関数と組み合わせれば、統合後のデータに対してフィルタリングや並び替えも可能です。注意点として、列数の一致やヘッダー行の重複対策が必要になります。次は、IMPORTRANGEと組み合わせて別ファイルのシートも統合する方法や、横方向の結合(カンマ区切り)にも挑戦してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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