CSVの月次・年次データを結合する方法|Excel Power Queryで自動化する手順を解説

毎月届く売上CSV、勤怠CSV、会計データのCSV。これらを年間で1つにまとめて集計したいのに、毎回ファイルを開いてコピペしている——そんな作業を続けていませんか。

月次CSVを年次データに結合する方法は、大きく4つあります。Excel Power Query、バッチファイル、Python、そしてオンラインツール。それぞれ得意な場面が異なるので、自分の状況に合った方法を選ぶのが最短ルートです。

この記事では、4つの方法の具体的な手順と使い分けに加えて、結合時にやりがちな失敗を防ぐチェックポイントも紹介します。


月次CSVを年次データにまとめるための4つの結合方法

CSV結合の方法は1つではありません。まず全体像を把握してから、自分に合った方法を選びましょう。

以下の比較表で、4つの方法の特徴を一覧できます。

比較軸 オンラインツール Power Query バッチファイル Python
難易度 ◎ 簡単 ○ やや簡単 ◎ 簡単 △ 要知識
柔軟性 ○ 中程度 ◎ 高い △ 低い ◎ 高い
自動化 △ 都度操作 ◎ 更新ボタン △ 手動実行 ◎ スクリプト化
環境構築 不要(ブラウザ) 不要(Excel標準) 不要(Windows標準) 必要(Python導入)
おすすめシーン 手軽に結合したい。文字コード混在も気にしたくない 月別売上・勤怠CSVを毎月追加して年間集計したい 今すぐ2〜3ファイルだけ結合したい 大量CSV(数百ファイル)を一括処理・前処理も自動化したい

ポイントは「一回きりの作業か、毎月繰り返すか」です。一回きりならバッチファイルやオンラインツールで十分。毎月繰り返すならPower QueryかPythonで仕組みを作っておくと、2回目以降の作業がほぼゼロになります。


プログラミング不要のCSV結合ツール

「Excelを開くのも面倒」「Pythonなんて触ったことない」——そんな人にはオンラインのCSV結合ツールが最適です。

ブラウザ上で動くCSV結合ツールなら、ファイルをドラッグ&ドロップするだけで結合が完了します。ソフトのインストールは不要。データはブラウザ内で処理されるため、サーバーにファイルを送信しないタイプのツールであれば、社外秘のデータでも安心して使えます。

オンラインツールを選ぶときのチェックポイント

結合ツールを選ぶ際に確認しておきたいのは、以下の3点です。

  1. 文字コードの自動判定に対応しているか:UTF-8のCSVとShift_JISのCSVが混在していても、自動で判定して正しく結合してくれるツールなら、事前の変換作業が不要になります
  2. 結合前にプレビューできるか:列の並びやデータの中身を確認してから結合できると、結合ミスを防げます
  3. データがサーバーに送信されないか:ブラウザ内完結型(クライアントサイド処理)のツールなら、機密データでも問題ありません

たとえば「LeapRows」(※筆者開発ツール)は、ブラウザ内でCSVを処理するツールで、UTF-8・Shift_JIS・EUC-JPなどの文字コードを自動判定して結合できます。列のプレビュー機能もあるので、ヘッダーがずれていないか結合前に目視確認が可能です。

「まず手元のCSVを試しにくっつけてみたい」という段階なら、こうしたツールから始めるのが一番早いです。

Excel Power Queryで月次CSVを結合する手順

毎月CSVが届く業務では、Power Queryが最も実用的な選択肢です。一度設定すれば、翌月からは「ファイルをフォルダに追加 → 更新ボタンを押す」だけで年間データが最新化されます。

Power QueryはExcel 2016以降に標準搭載されている機能で、追加のインストールは不要です。

事前準備:CSVファイルを1つのフォルダにまとめる

結合したいCSVファイルを、1つの専用フォルダにまとめます。ここで守るべきルールは3つです。

  • 結合対象のCSVだけを入れる:関係ないファイルが混ざると、そのデータも結合されてしまいます
  • ファイル名に年月を含める2024_01_sales.csv2024_02_sales.csv のように命名しておくと、あとから時系列が把握しやすくなります
  • 出力ファイルを同じフォルダに置かない:結合結果のExcelファイルを同じフォルダに保存すると、次回の読み込み時にループしてエラーになります

フォルダ構成の例:

C:\データ集計\月次CSV\
  ├── 2024_01_sales.csv
  ├── 2024_02_sales.csv
  ├── 2024_03_sales.csv
  └── ...(12ヶ月分)

「データの取得」→「フォルダーから」で一括読み込み

準備ができたら、Excelを開いて以下の手順で操作します。

ステップ1:リボンの「データ」タブをクリック

ステップ2:「データの取得」→「ファイルから」→「フォルダーから」を選択

ステップ3:先ほど作成したCSVフォルダを指定

ステップ4:プレビュー画面が表示されたら、「結合および読み込み」をクリック

ステップ5:サンプルファイルの確認画面で「OK」をクリック

これだけで、フォルダ内の全CSVが1つのテーブルに結合されてワークシートに展開されます。

不要列の削除とデータ型の設定

結合直後のテーブルには、ファイルパスやファイル名の列が自動追加されています。集計に不要な列は、Power Queryエディターで削除しておきましょう。

  1. テーブル内のセルを選択し、「クエリ」タブから「編集」をクリック
  2. Power Queryエディターが開く
  3. 不要な列のヘッダーを右クリック →「列の削除」を選択
  4. 日付列は「データ型」を「日付」に、金額列は「整数」や「10進数」に変更

データ型を明示的に設定しておくと、ピボットテーブルでの集計時にグルーピングや計算が正しく動作します。設定を省略すると、日付が文字列として扱われて月別集計ができない、といったトラブルの原因になります。

新しい月のCSVを追加したら「更新」するだけ

Power Queryの最大のメリットは、設定が「クエリ」として保存される点です。

翌月の運用はこれだけで完了します。

  1. 新しい月のCSVファイルをフォルダに入れる
  2. Excelを開く
  3. 「データ」タブ →「すべて更新」をクリック

たったこれだけで、新しいファイルのデータが既存のテーブルに追加されます。12ヶ月分が溜まれば、そのまま年間集計の元データとして使えます。

毎月のコピペ作業に30分かけていたなら、この仕組みを一度作るだけで、年間6時間の節約になる計算です。

ピボットテーブルで月別・四半期別・年別に自動集計

Power Queryで結合したデータは、そのままピボットテーブルの元データとして使えます。

手順は以下のとおりです。

  1. Power Queryで結合したテーブルのセルを選択
  2. 「挿入」タブ →「ピボットテーブル」をクリック
  3. 行エリアに「日付」列をドラッグ
  4. 日付を右クリック →「グループ化」→「月」「四半期」「年」を選択
  5. 値エリアに集計したい数値列(売上、件数など)をドラッグ

これで月別・四半期別・年別の集計表が自動生成されます。

ピボットテーブルとPower Queryの連携で優れているのは、更新の仕組みがつながっている点です。フォルダに新しい月のCSVを追加して「すべて更新」を押せば、結合データとピボットテーブルの両方が最新化されます。

毎月の定例作業が「CSVをフォルダに入れる → 更新ボタンを押す → 集計完了」の3ステップに短縮されます。


バッチファイルでCSVを結合する方法・簡易版

「2〜3個のCSVを今すぐ1つにしたい」という場面なら、バッチファイルが最速です。Windowsのコマンドを使うので、Excelすら開く必要がありません。

バッチファイルの作成と実行手順

手順はたった3ステップです。

ステップ1:結合したいCSVを同じフォルダに入れる

任意のフォルダを作成し、結合したいCSVファイルをすべてそこに入れます。

ステップ2:バッチファイルを作成する

メモ帳を開いて、以下の2行を入力します。

del matome.csv
copy *.csv matome.csv

1行目で前回の結合ファイルを削除してから結合します。この削除ステップを省略すると、バッチを2回目以降に実行したとき、前回生成した matome.csv*.csv のパターンに一致して結合対象に混入してしまいます。

「名前を付けて保存」で、ファイル名を merge.bat にします。保存先は、CSVファイルと同じフォルダです。文字コードは「ANSI」を選んでください(UTF-8だとコマンドが正しく動かないことがあります)。

ステップ3:バッチファイルをダブルクリックして実行する

merge.bat をダブルクリックすると、同じフォルダに matome.csv が生成されます。中身は、フォルダ内のすべてのCSVが縦に連結されたものです。

所要時間は30秒もかかりません。

バッチ結合の限界(ヘッダー重複・整形不可)

手軽な反面、バッチファイルでの結合には明確な限界があります。

ヘッダー行が重複する。各CSVの1行目(列名の行)がそのまま残るため、結合後のファイルには「ヘッダーがファイルの数だけ繰り返される」状態になります。3ファイルを結合すれば、ヘッダーが3行混入します。Excelで開いて手動で削除するか、あらかじめ2ファイル目以降のヘッダーを除去しておく必要があります。

列の選択やフィルタリングはできない。バッチファイルはCSVの中身を解釈しません。ファイルをテキストとしてそのまま連結するだけなので、「特定の列だけ抽出したい」「日付でフィルタしたい」といった処理には対応できません。

用途としては「とりあえず全部くっつけて中身を確認する」程度に留めるのが無難です。本格的な集計が必要なら、Power QueryかPythonに切り替えましょう。


Pythonで月次CSVを結合する方法

数百ファイルの一括処理、結合と同時にデータの前処理、Excelの行数上限を超える大量データ——こうした場面では、Pythonが最も頼りになります。

Python + pandasで結合するコード例

Pythonの pandas ライブラリを使えば、フォルダ内のCSVを一括で結合するコードは10行程度で書けます。

import glob
import pandas as pd

# フォルダ内の全CSVファイルを取得
csv_files = glob.glob("月次CSV/*.csv")

# 全ファイルを読み込んで結合
df = pd.concat([pd.read_csv(f) for f in csv_files], ignore_index=True)

# 結合結果を保存
df.to_csv("年次データ.csv", index=False, encoding="utf-8-sig")

print(f"{len(csv_files)}ファイルを結合しました({len(df)}行)")

glob.glob() で指定フォルダ内のCSVパスを一覧取得し、pd.read_csv() で各ファイルを読み込み、pd.concat() で縦に連結します。結合結果は to_csv() で1つのCSVファイルとして出力。encoding="utf-8-sig" を指定しておくと、Excelで開いたときに文字化けしません。

Pythonならではの強み(前処理・大量データ・スケジュール実行)

Pythonが他の方法と一線を画すのは、結合のついでにデータの前処理まで自動化できる点です。

# 結合時に前処理を加える例
dfs = []
for f in csv_files:
    df_temp = pd.read_csv(f)
    df_temp.columns = df_temp.columns.str.strip()    # 列名の前後の空白を除去
    df_temp = df_temp.dropna(how="all")               # 全列が空の行を削除
    df_temp["ファイル名"] = f.split("/")[-1]           # 元ファイル名を列として追加
    dfs.append(df_temp)

df = pd.concat(dfs, ignore_index=True)

列名の揺れを修正したり、空行を除去したり、元のファイル名を識別列として残したり。手作業なら1ファイルずつ開いて確認する作業が、コード1回の実行で全ファイルに適用されます。

Excelの行数上限は約104万行ですが、pandasにはこの制限がありません。月次CSVが各10万行 × 12ヶ月=120万行でも、問題なく処理できます。

スクリプトをバッチ化してWindowsのタスクスケジューラや、Linuxのcronに登録すれば、毎月自動で結合処理を実行することも可能です。

Python環境がない人はGoogle Colabで試せる

「Pythonに興味はあるけど、インストールは面倒」という人には、Google Colabがおすすめです。

Google Colabは、ブラウザ上でPythonコードを実行できるGoogleの無料サービスです。環境構築は一切不要で、Googleアカウントがあればすぐに使えます。

使い方の流れはこうです。

  1. Google Colab(colab.research.google.com)にアクセス
  2. 「新しいノートブック」を作成
  3. 左側のファイルアイコンからCSVファイルをアップロード
  4. 上記のコードを貼り付けて実行
  5. 生成された結合済みCSVをダウンロード

pandasは最初からインストール済みなので、コードをコピペして実行するだけです。「Pythonで何ができるか試してみたい」という入門にもちょうどいい題材です。

CSV結合で失敗しないための4つのチェックポイント

どの方法で結合するにしても、事前にチェックしておくべきポイントがあります。ここを飛ばすと「結合はできたけどデータがおかしい」という手戻りが発生します。

列名と列順はすべてのファイルで揃っているか

結合で最も多いトラブルが、列名の不一致です。

たとえば、1月のCSVでは「売上金額」、2月のCSVでは「売上額」——人間が見れば同じ意味でも、ツールにとっては別の列です。結合すると「売上金額」と「売上額」が別々の列として並び、それぞれ半分がブランクになります。

対策はシンプルです。結合する前に、各ファイルの1行目(ヘッダー)を目視で比較してください。CSVをメモ帳で開けば、1行目だけすぐに確認できます。列名に微妙な違いがあったら、結合前に統一しておきましょう。

Power Queryの場合は、列名が同じであれば列順が異なっていても正しく結合してくれます。バッチファイルの場合は、列順もファイル間で一致させる必要があります。

文字コード(UTF-8 / Shift_JIS)は統一されているか

日本語のCSVで厄介なのが文字コードの問題です。同じ「.csv」ファイルでも、UTF-8で保存されたものとShift_JISで保存されたものが混在していると、結合後に文字化けが発生します。

文字コードの確認方法は簡単です。CSVファイルをメモ帳で開き、右下に表示されるエンコーディング表示を見てください。「UTF-8」「ANSI(=Shift_JIS)」などが確認できます。サクラエディタなら、ステータスバーにより詳しい文字コード情報が表示されます。

統一するのが面倒な場合は、文字コードの自動判定に対応したツールを使うのが手っ取り早い方法です。LeapRows(※筆者開発ツール)のCSV結合機能は、UTF-8・Shift_JIS・EUC-JPなどの文字コードを自動判定して結合するため、事前の変換作業が不要です。

Pythonの場合は chardet ライブラリで自動判定する方法もありますが、ツール側で処理してくれるならそのほうが楽です。

ヘッダー行が重複していないか

バッチファイルでCSVを結合した場合、ヘッダー行(列名の行)がファイルの数だけ重複します。

たとえば12ファイルを結合すると、データの途中にヘッダー行が11回出現します。このまま集計すると、ヘッダー行のテキストが数値列に混入してエラーになったり、行数が実際より多くカウントされたりします。

Power Queryを使えば、この問題は自動的に解消されます。Power Queryは各ファイルの1行目をヘッダーとして認識し、2行目以降のデータだけを結合してくれるためです。

バッチファイルで結合したあとに手動で対処する場合は、Excelで開いて「ヘッダー行と同じ内容の行」をフィルタで抽出し、一括削除するのが効率的です。

データ量が多すぎてExcelが固まらないか

Excelの1シートに入る最大行数は1,048,576行(約104万行)です。

月次CSVが各5万行あるとすると、12ヶ月分で60万行。これなら問題ありません。しかし各10万行あると、12ヶ月分で120万行。Excelの上限を超えます。

上限を超えなくても、数十万行のデータをPower Queryで読み込むとExcelの動作が重くなることがあります。体感として、30万行を超えたあたりから操作のもたつきが気になり始めます。

大量データの場合は、以下の代替手段を検討してください。

  • Python + pandas:行数の制限なし。数百万行でも処理可能
  • Google BigQuery:クラウド上でSQLを使って集計。無料枠あり
  • DuckDB:ローカルで動く軽量データベース。CSVを直接クエリできる

「完全自動化」を目指すならGASのスケジュール実行

Power Queryの「更新ボタンを押す」すらなくしたい——そこまで自動化したいなら、Google Apps Script(GAS)のスケジュール実行が選択肢に入ります。

GASはGoogleスプレッドシートに組み込めるスクリプト環境で、Google Driveのファイル操作やスプレッドシートの読み書きをプログラムで自動化できます。

基本的な仕組みはこうです。

  1. Google Driveの特定フォルダにCSVを格納する運用にする
  2. GASでフォルダ内のCSVを読み込み、スプレッドシートに結合するスクリプトを書く
  3. GASのトリガー機能で「毎月1日の午前9時に自動実行」と設定する

これで、フォルダにCSVを入れておけば、月初に自動で結合処理が走ります。PC起動不要。結果はスプレッドシートに反映されるので、チームメンバーとの共有もURLを送るだけです。

Power Queryとの違いをまとめると、以下のようになります。

項目 Power Query GAS
実行環境 ローカルPC(Excel) クラウド(Google)
自動実行 × 手動で更新ボタン ○ トリガーで定期実行
共有のしやすさ △ ファイル送付 ◎ URL共有
学習コスト 低い やや高い(JavaScript)

「Excelに慣れている人はPower Query、Google Workspaceを使っている組織はGAS」という使い分けが現実的です。


CSVの手作業運用を根本から見直すヒント

ここまで結合方法を紹介してきましたが、一歩引いて考えてみると「そもそもCSVを結合する必要がない仕組み」を作るほうが、長期的にはずっと楽です。

結合前のデータクレンジングを習慣にする

結合後に「なんかデータがおかしい」と気づくケース。原因の多くは、結合前の元データに問題があります。

よくあるのは以下のパターンです。

  • 不要な列が混ざっている:システムから出力されるCSVに、集計に不要な管理用の列が含まれている
  • 日付の形式がバラバラ:あるファイルは 2024/01/15、別のファイルは 2024-1-15。形式が違うと、日付として認識されない
  • 空白行や合計行が含まれている:CSVの末尾に合計行が入っていると、結合後の集計で二重カウントされる

こうした問題は、CSVを受け取った時点で30秒チェックする習慣をつけるだけで防げます。毎回やるのが面倒なら、Power Queryのステップに前処理を組み込んでおけば、結合と同時に自動で処理されます。

毎月CSVを受け取る運用自体を見直す

「毎月末にCSVファイルがメールで届く」「各拠点の担当者が共有フォルダにCSVを置く」——この運用を続ける限り、結合作業はなくなりません。

根本的に解決するなら、運用の仕組み自体を変える方法があります。

  • Googleスプレッドシートで共有する:各拠点が同じスプレッドシートにデータを入力すれば、そもそも結合が不要
  • フォーム入力に切り替える:Googleフォームやkintoneで入力してもらえば、データは最初から1つのテーブルに集約される
  • APIやデータベース連携:社内システムからCSVをエクスポートする代わりに、API経由でデータを直接取得する

もちろん、相手先のシステムや社内ルールの制約ですぐには変えられないケースもあります。その場合は、まずPower Queryで結合の仕組みを作りつつ、並行して「CSVをなくす」方向の提案を進めるのが現実的です。


まとめ

月次CSVを年次データに結合する方法は、用途に応じて4つの選択肢があります。

  • 毎月繰り返す集計作業には、Power Queryが最も実用的です。一度設定すれば「ファイル追加 → 更新クリック」だけで済みます
  • 今すぐ手軽に結合したいなら、オンラインツールかバッチファイルが最速です
  • 大量データや前処理も含めて自動化したいなら、Pythonが最も柔軟です

どの方法を選ぶにしても、結合前の「列名の統一」「文字コードの統一」は必ず確認してください。この2つを飛ばすと、結合後のデータ不整合で時間を浪費することになります。

結合はあくまで手段であり、目的は集計や分析です。結合と集計を一気通貫で仕組み化してしまえば、毎月の定例作業から解放されます。