複数の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ファイルをスプレッドシートにインポートする
- 新しいスプレッドシートを作成します。
Googleスプレッドシートを開き、新しい空白のスプレッドシートを作成します。このファイルにすべてのCSVデータを集約します。 - 「ファイル」メニューから「インポート」を選びます。
メニューバーの「ファイル」をクリックし、ドロップダウンから「インポート」を選択します。ファイルをアップロードするか、Google Driveから選択できます。 - インポート場所を「新しいシート」にします。
インポートダイアログで、インポート場所として「新しいシート」を選びます。これで、各CSVが別々のシートとして追加されます。区切り文字や文字コードは自動で判定されますが、必要に応じて変更できます。 - すべてのCSVファイルを同様にインポートします。
手順2〜3を繰り返し、統合したいすべてのCSVをそれぞれ別のシートにインポートします。シート名は元のファイル名や「Sheet1」「Sheet2」などで管理しましょう。
QUERY関数で複数シートのデータを結合する
- 結合先のシートを用意します。
新しいシートを追加し、名前を「統合」などに変更します。このシートにすべてのデータが集まります。 - QUERY関数を入力します。
統合シートのセルA1に次の数式を入力します。=QUERY({Sheet1!A:Z; Sheet2!A:Z; Sheet3!A:Z},"where Col1 is not null",1)
Sheet1, Sheet2, Sheet3の部分は実際のシート名に置き換えてください。配列リテラル{}で複数シートの範囲を指定し、QUERY関数でヘッダー行を保持したままデータを結合します。 - 列数が異なる場合の対処方法です。
各シートの列数が異なる場合は、列数が少ないシートの範囲に空白の列を追加します。例えば{Sheet1!A:Z; {Sheet2!A:Z, arrayformula(if(Sheet2!A:A="","",""))}}のように工夫します。または、QUERYのselect句で必要な列のみ指定する方法もあります。
IMPORTRANGE関数で別ファイルからCSVデータを参照する手順
CSVファイルをスプレッドシートとして保存し、IMPORTRANGE関数で別ファイルからデータを参照する方法です。この方法のメリットは、元のスプレッドシートを更新すると自動的に統合シートも更新される点です。
- 各CSVファイルをスプレッドシートとして開きます。
Google DriveでCSVファイルを右クリックし、「アプリで開く」→「Googleスプレッドシート」を選択します。これでCSVがスプレッドシート形式で開かれます。必要に応じてファイル名を変更し、Google Driveに保存します。 - 統合用のスプレッドシートでIMPORTRANGEを入力します。
新しいスプレッドシートを作成し、統合シートのセルA1に次の数式を入力します。=IMPORTRANGE("スプレッドシートのURL", "シート名!A:Z")
スプレッドシートのURLは、各CSVのスプレッドシートのURLです。初めて使用する際は、アクセス許可を求めるプロンプトが表示されるので、「アクセスを許可」をクリックします。 - 全データを結合する場合は複数のIMPORTRANGEを組み合わせます。
例えば={IMPORTRANGE("url1","Sheet1!A:Z"); IMPORTRANGE("url2","Sheet1!A:Z")}のように、配列リテラルで縦に結合します。ただし、IMPORTRANGEは大量データの場合動作が遅くなるため、数式が重くなりすぎないよう注意してください。
ADVERTISEMENT
Apps ScriptでCSVを自動統合する手順
大量のCSVや定期的な統合が必要な場合は、Apps Scriptを使って自動化するのが効率的です。Google Drive内の特定フォルダにあるCSVをすべて読み込み、一つのシートに結合するスクリプトを作成します。
- スクリプトエディタを開きます。
統合用のスプレッドシートを開き、メニューの「拡張機能」→「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。 - スクリプトコードを記述します。
以下のコードをエディタに貼り付けます。このコードは、指定したフォルダ内のすべての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末尾の部分をコピーして貼り付けてください。 - スクリプトを実行します。
エディタの上にある「実行」ボタン(▶)をクリックします。初回は権限の承認が必要です。承認後、スクリプトが実行され、CSVデータがシートに追加されます。シートの1行目がヘッダーとして扱われ、最初のファイルのヘッダーがそのまま残ります。 - 定期実行を設定する場合です。
スクリプトエディタの左側の時計アイコン(トリガー)をクリックし、トリガーを追加します。時間主導型(例:毎日午前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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】複合グラフで棒と折れ線を同時表示!2軸グラフの作り方
- 【Googleスプレッドシート】FILTER関数で条件に合う行だけ抽出!数式1つで動的な絞り込み
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】重複データを抽出して表示!COUNTIFと条件付き書式の併用
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】ARRAYFORMULAで列全体に数式を一括適用!セル分の入力を不要に
- 【Googleスプレッドシート】データ範囲を動的に伸縮させる!INDIRECTと参照範囲のコツ
- 【Googleスプレッドシート】共有解除と権限の取り消し!アクセスを完全に閉じる手順
