【Googleスプレッドシート】複数のCSVを1つのスプレッドシートにまとめる!統合の手順

【Googleスプレッドシート】複数のCSVを1つのスプレッドシートにまとめる!統合の手順
🛡️ 超解決

複数のCSVファイルを一つにまとめたいと思ったことはありませんか。月ごとの売上データや部門別の集計表など、バラバラのCSVをスプレッドシートで統合できれば、分析やレポート作成が格段に効率化します。この記事では、手動操作や関数、さらにはApps Scriptを使って複数のCSVを1つのスプレッドシートにまとめる方法を、具体的な手順とともに解説します。

【要点】複数のCSVを1つのスプレッドシートにまとめる3つの方法

  • 手動インポートとQUERY関数の組み合わせ: 各CSVを別シートにインポートし、QUERY関数で一つのシートに統合します。初心者にも簡単な方法です。
  • =IMPORTRANGE関数で他ファイルを参照: CSVをスプレッドシートとして保存し、IMPORTRANGEで別ファイルからデータを引っ張ります。リアルタイム更新が可能です。
  • Apps Scriptによる自動統合: Google Drive内のCSVを一括で読み込み、指定シートに結合します。大量データや定期実行に最適です。

ADVERTISEMENT

CSV統合前に確認したい前提条件

複数のCSVを統合する前に、いくつかの前提条件を確認しておきましょう。まず、すべてのCSVファイルがGoogle Driveの任意のフォルダに保存されている必要があります。また、各CSVの列構成(列の順番やデータ型)が統一されていることが理想です。列数が異なる場合は、後述の方法で調整可能ですが、できるだけ同じ形式に揃えておくことをおすすめします。CSVの文字コードはUTF-8が最もトラブルが少ないです。Shift_JISの場合はインポート時に文字化けすることがあるため、事前にUTF-8に変換しておくと安心です。

手動インポートとQUERY関数でCSVを統合する手順

最も手軽な方法は、各CSVをスプレッドシートにインポートしてから、QUERY関数を使って一つにまとめることです。手順を詳しく説明します。

各CSVファイルをスプレッドシートにインポートする

  1. 新しいスプレッドシートを作成します。
    Googleスプレッドシートを開き、新しい空白のスプレッドシートを作成します。このファイルにすべてのCSVデータを集約します。
  2. 「ファイル」メニューから「インポート」を選びます。
    メニューバーの「ファイル」をクリックし、ドロップダウンから「インポート」を選択します。ファイルをアップロードするか、Google Driveから選択できます。
  3. インポート場所を「新しいシート」にします。
    インポートダイアログで、インポート場所として「新しいシート」を選びます。これで、各CSVが別々のシートとして追加されます。区切り文字や文字コードは自動で判定されますが、必要に応じて変更できます。
  4. すべてのCSVファイルを同様にインポートします。
    手順2〜3を繰り返し、統合したいすべてのCSVをそれぞれ別のシートにインポートします。シート名は元のファイル名や「Sheet1」「Sheet2」などで管理しましょう。

QUERY関数で複数シートのデータを結合する

  1. 結合先のシートを用意します。
    新しいシートを追加し、名前を「統合」などに変更します。このシートにすべてのデータが集まります。
  2. QUERY関数を入力します。
    統合シートのセルA1に次の数式を入力します。=QUERY({Sheet1!A:Z; Sheet2!A:Z; Sheet3!A:Z},"where Col1 is not null",1)
    Sheet1, Sheet2, Sheet3の部分は実際のシート名に置き換えてください。配列リテラル{}で複数シートの範囲を指定し、QUERY関数でヘッダー行を保持したままデータを結合します。
  3. 列数が異なる場合の対処方法です。
    各シートの列数が異なる場合は、列数が少ないシートの範囲に空白の列を追加します。例えば{Sheet1!A:Z; {Sheet2!A:Z, arrayformula(if(Sheet2!A:A="","",""))}}のように工夫します。または、QUERYのselect句で必要な列のみ指定する方法もあります。

IMPORTRANGE関数で別ファイルからCSVデータを参照する手順

CSVファイルをスプレッドシートとして保存し、IMPORTRANGE関数で別ファイルからデータを参照する方法です。この方法のメリットは、元のスプレッドシートを更新すると自動的に統合シートも更新される点です。

  1. 各CSVファイルをスプレッドシートとして開きます。
    Google DriveでCSVファイルを右クリックし、「アプリで開く」→「Googleスプレッドシート」を選択します。これでCSVがスプレッドシート形式で開かれます。必要に応じてファイル名を変更し、Google Driveに保存します。
  2. 統合用のスプレッドシートでIMPORTRANGEを入力します。
    新しいスプレッドシートを作成し、統合シートのセルA1に次の数式を入力します。=IMPORTRANGE("スプレッドシートのURL", "シート名!A:Z")
    スプレッドシートのURLは、各CSVのスプレッドシートのURLです。初めて使用する際は、アクセス許可を求めるプロンプトが表示されるので、「アクセスを許可」をクリックします。
  3. 全データを結合する場合は複数のIMPORTRANGEを組み合わせます。
    例えば={IMPORTRANGE("url1","Sheet1!A:Z"); IMPORTRANGE("url2","Sheet1!A:Z")}のように、配列リテラルで縦に結合します。ただし、IMPORTRANGEは大量データの場合動作が遅くなるため、数式が重くなりすぎないよう注意してください。

ADVERTISEMENT

Apps ScriptでCSVを自動統合する手順

大量のCSVや定期的な統合が必要な場合は、Apps Scriptを使って自動化するのが効率的です。Google Drive内の特定フォルダにあるCSVをすべて読み込み、一つのシートに結合するスクリプトを作成します。

  1. スクリプトエディタを開きます。
    統合用のスプレッドシートを開き、メニューの「拡張機能」→「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。
  2. スクリプトコードを記述します。
    以下のコードをエディタに貼り付けます。このコードは、指定したフォルダ内のすべてのCSVファイルを読み込み、アクティブなシートに結合します。
    function mergeCSVs() {
    var folder = DriveApp.getFolderById('フォルダID');
    var files = folder.getFilesByType(MimeType.CSV);
    var sheet = SpreadsheetApp.getActiveSheet();
    var firstFile = true;
    while (files.hasNext()) {
    var file = files.next();
    var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
    if (firstFile) {
    sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
    firstFile = false;
    } else {
    var lastRow = sheet.getLastRow();
    sheet.getRange(lastRow + 1, 1, csvData.length, csvData[0].length).setValues(csvData);
    }
    }
    }

    フォルダIDは、Google DriveのフォルダURLに含まれる英数字の文字列です。フォルダを開いたときのURL末尾の部分をコピーして貼り付けてください。
  3. スクリプトを実行します。
    エディタの上にある「実行」ボタン(▶)をクリックします。初回は権限の承認が必要です。承認後、スクリプトが実行され、CSVデータがシートに追加されます。シートの1行目がヘッダーとして扱われ、最初のファイルのヘッダーがそのまま残ります。
  4. 定期実行を設定する場合です。
    スクリプトエディタの左側の時計アイコン(トリガー)をクリックし、トリガーを追加します。時間主導型(例:毎日午前9時)を選択すれば、自動で統合が行われます。

CSV統合時の注意点とよくあるトラブル

インポート時に文字化けが発生する場合

CSVファイルの文字コードがShift_JISなどUTF-8以外の場合、インポート時に文字化けが起こることがあります。対処法として、元のCSVをUTF-8に変換してからインポートしてください。テキストエディタで「名前を付けて保存」の際にUTF-8を選ぶか、Googleスプレッドシートのインポートダイアログで「ファイルの変換」オプションを試してみてください。Apps Scriptを使う場合は、getDataAsString('Shift_JIS')のようにエンコーディングを指定することで解決できます。

データが重複してしまう場合

複数のCSVに同じデータが含まれていると、統合後に重複が生じます。QUERY関数で統合する場合は、select distinctを使って重複を除去できます。例:=QUERY({Sheet1!A:Z; Sheet2!A:Z},"select distinct * where Col1 is not null",1)。Apps Scriptの場合は、コード内で重複チェックを行うか、統合後にUNIQUE関数を別シートで使う方法もあります。

IMPORTRANGEの権限エラーが発生する場合

IMPORTRANGEを使用する際、初回はアクセス許可が必要です。セルにエラーが表示された場合は、そのセルをクリックすると「アクセスを許可」ボタンが現れます。また、参照元のスプレッドシートの共有設定が適切でない場合もエラーになります。参照元ファイルを自分が編集できるようにするか、共有リンクの権限を「閲覧可能」以上に設定してください。

各方法の比較表

方法 手間 自動更新 大量データ対応 必要なスキル
手動インポート+QUERY 不可 中程度 初級
IMPORTRANGE 可能 低(速度低下注意) 初級
Apps Script 可能(トリガー設定) 中級

まとめ

この記事では、複数のCSVファイルをGoogleスプレッドシートにまとめる3つの方法を紹介しました。手動インポートとQUERY関数の組み合わせは、特別なスキルが不要で即座に実践できます。IMPORTRANGE関数を使えば、元データの更新が自動反映されるため、定期的なレポートに便利です。さらに、Apps Scriptで自動化すれば、大量のCSVを指定フォルダから一括で統合し、トリガー設定により完全自動化も可能です。データの量や更新頻度に合わせて最適な方法を選び、スプレッドシートでのデータ管理を効率化してください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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