【Windows】複数のCSVファイルをひとつに結合するバッチファイルの作り方

「大量にあるCSVファイルを一つにまとめたい。
でも、各ファイルの先頭に不要なヘッダー情報(タイトルや出力条件など)が数行入っていて、
そのまま結合するとデータがガタガタになってしまう……」

そんな悩みはありませんか?Excelで一つずつ開いて行を削除し、
コピー&ペーストを繰り返すのは時間の無駄です。

Windowsの標準機能だけで動く「バッチファイル」を使えば、
フォルダ内の全ファイルを対象に、特定の行をスキップしながらスマートに結合できます。

このバッチファイルでできること

今回紹介するコードは、以下の3つの処理を自動で行います。

先頭の余計な4行をカット:全てのCSVから、不要な最初の4行を自動で取り除きます。
ヘッダー(見出し行)の維持:1つ目のファイルからは見出し行を維持し、2つ目以降のファイルからは見出しもカットしてデータだけを抽出します。
ひとつのCSVに出力:全データを統合し、all.csvという名前で保存します。

仕組みの解説

このスクリプトの肝は、Windows標準のmoreコマンドを活用している点です。
通常、ファイルの結合にはtypecopyが使われますが、more +nというオプションを使うことで、
「先頭から $n$ 行を読み飛ばす」という高度な処理が可能になります。

1つ目のファイルmore +4で不要な4行だけを飛ばし、5行目(見出し)から取得。
2つ目以降more +5で不要な4行+見出し1行の計5行を飛ばし、純粋なデータのみを末尾に追記。

このロジックにより、結合後のファイルに余計な見出しが何度も登場することなく、
そのままデータベースや分析ツールにインポートできる綺麗なCSVが完成します。

どんな時に役立つ?

私の場合、確定申告の際のカードからの引き落とし情報のCSVを1月~12月分をひとまとめにして、レシートや領収書からの手入力作業軽減のために利用しています。(セゾンカードのCSVが純粋なCSVでなく、ヘッダーの上に余分な情報が付加されているため、この余分な情報を削除するコードをバッチファイルに入れています。)

コードと使い方

下記のコードをコピーし、メモ帳やテキストエディタにペーストし、merge_csv.batなどファイル名をつけ保存します。 merge_csv.batを結合したいCSVファイルの入っているフォルダに設置し、ダブルクリックで実行。 結合されたall.csvが生成されたら完了です。

@echo off
setlocal enabledelayedexpansion

set "output=all.csv"
if exist "%output%" del "%output%"

set "first=1"

for %%f in (*.csv) do (
    if /i not "%%f"=="%output%" (
        echo %%f を処理中...
        if !first!==1 (
            rem 最初のファイル:4行飛ばして(5行目の見出しから)出力
            more +4 "%%f" > "%output%"
            set "first=0"
        ) else (
            rem 2回目以降:5行飛ばして(4行+見出し1行)追記
            more +5 "%%f" >> "%output%"
        )
    )
)

echo.
echo 最初の4行を除去し、ヘッダーを整理して %output% に結合しました。
pause

まとめ

CSVの結合は、特別なツールを使わなくても、
数行のコードで日々のルーチンワークは劇的に効率化できます。

「4行削除」の部分を「1行」や「10行」に変えるだけで、様々な形式のCSVに応用可能です。
ぜひ、日々の業務効率化に役立ててみてください!

巨大CSVを分割する方法

https://www.uki213.com/memo/split-large-csv-files-with-powershell-batch-script/

関連記事

コメントを残す

*