INSIGHT

情報・インサイト

WindowsバッチでCSVのファイル名を先頭項目に追加して1ファイルに統合する方法

2020.07.31

Windowsバッチで効率化

前回のWindowsバッチを使って複数ファイルを1つに統合する方法をご紹介しましたが、
今回はその方法を応用し、統合する各ファイル名をCSVの先頭項目に追加しつつ、
1つのファイルにまとめる方法をご紹介します。

バラバラのファイルをまとめて集計したいけど、1つずつ集計するのは大変な作業です。
そんな悩みを一瞬で解決できる方法ですので是非お試しください。

作成ファイルのイメージ

学年の成績データをサンプルに説明します。
フォーマットが共通のCSVデータであれば、商品データ、受発注データ、ログファイルなど、
どんなデータでも応用ができます。

統合するCSV

このようなクラスごとに成績データを1つのファイルにまとめます。
データにクラス名が無いため、このまま統合すると何年何組かわからなくなります。
そこでファイル名(ここではクラス名)を先頭に付けてまとめます。

■1-A.csv(1年A組の試験成績)1年A組.csv
・・・
■2-A.csv(2年A組の試験成績)2年A組.csv
・・・
■3-B.csv(3年B組の試験成績)3年B組.csv

統合ファイル

統合されるファイルはこのようになります。
ファイル名が先頭に追加されたCSVにまとめられます。

■matome.csv
統合イメージ

ファイルは記事の下からダウンロードできるようにしています。

 

Windowsバッチでファイル統合

それではやってみましょう。

Windowsバッチの作成(ソースのコピペ)

まずはファイルをまとめるためのBATファイルを作ります。
ソースをコピペして「matome.bat」で保存してください。
保存場所はまとめるファイルが配置されているフォルダです。

@echo off
setlocal enabledelayedexpansion
cd /d %~dp0
rem ファイルの文字コードがUTF-8の場合は設定
rem chcp 65001

rem ヘッダーを判定するための行カウント
set /a cnt=0

rem ファイル名を設定
set FILE_NAME=matome.csv

rem フォルダにあるCSVファイルを1つずつ処理
for /f %%a in ('dir /b *.csv') do (
    set TARGET_FILE=%%a
    
    rem ファイル名を出力
    echo TARGET_FILE=!TARGET_FILE!

    rem 1ファイル目であればヘッダーを出力
    if !cnt!==0 (
        rem 1行目を取得して出力
        set /p header=<!TARGET_FILE!
        echo ファイル名,!header!>>"!FILE_NAME!"
    )
    
    rem カウントを追加
    set /a cnt=!cnt!+1
    
    rem ファイルの1行目を飛ばして1行ずつ出力
    for /f "usebackq delims= skip=1" %%b in ("!TARGET_FILE!") do (
       echo !TARGET_FILE!,%%b>>"!FILE_NAME!"
    )
)

endlocal

ポイント

  • CSVファイル、batファイルはShift-JISを前提にしています
  • CSVファイルがUTF-8の場合は「rem chcp 65001」のremを削除してください
  • echo ファイル名,!header!>>"!FILE_NAME!"」箇所が統合ファイルのヘッダー部分です
    【ファイル名】部分を任意の文字(クラス名)など変更して利用してください

 
作成後のイメージはこんな感じです。

Windowsバッチイメージ

バッチ実行

作成した「matome.bat」をダブルクリックで実行します。
フォルダにある全ファイルをまとめた【matome.csv】が作成されます。

統合csv出力イメージ

先頭にファイル名が追加されて1ファイルにまとめられていますね。

統合イメージ

 
統合方法は以上です。
ソースをコピペしてBATファイルを作るだけで簡単にできますね。

 

Googleスプレッドシートのピボットテーブルで平均値集計

Googleスプレッドシートのピボットテーブルを利用して、
今回1つにまとめたファイルからクラスごとの平均値を集計してみましょう。
この手順はエクセルでも同様に集計することができます。

スプレッドシートの準備

matome.csvの中身をスプレッドシートにコピペします。
コピペが終わったら、右下に表示される貼り付けアイコンから「テキストを列に分割」を選択します。

ピボットテーブル01

CSVファイルのカンマがセルに分割されて設定されます。

ピボットテーブル02

ピボットテーブルの作成

貼り付けたデータを全て選択状態にしてから、「データ > ピボットテーブル」を選択します。

ピボットテーブル03

「データの範囲(選択済み)」「新しいシート」を選択して、ピボットテーブルを作成します。

ピボットテーブル04

新しいシートに空のピボットテーブルテーブルが作成されました。

ピボットテーブル05

ピボットテーブルの平均値設定

続いてピボットテーブルエディタから平均を求める設定を行います。
行・値の設定から簡単にクラスごとの平均値を集計できます。

ピボットテーブル06

  • ”行”の設定
     ・【ファイル名】を追加
  • ”値”の設定
     ・「表示」に ”列” を選択
     ・【英語】【国語】【社会】【理科】【数学】の各項目を追加
     ・「集計方法」に ”AVERAGE” を選択
     ・「表示方法」に “デフォルト” を選択

ファイルがバラバラだと簡単にはできないですが、
Windowsバッチを利用することで簡単に平均値を求めることができましたね。

 

サンプルのダウンロード

今回利用したサンプルファイルはこちらからダウンロードしてご利用ください。
尚、3年B組はこだわりのファイルになっています。

サンプルファイルのダウンロード(CSV、BATファイル)

スプレッドシートのサンプル

うまくファイルをまとめることができましたか?
複数のファイルでバラバラになったファイルを集計するとき、
WindowsのBatファイルやスプレッドシートをうまく利用することで、
劇的に業務を効率化することができます。

 

弊社ではお客様の課題を解決や業務の効率化に全力で取り組んでいます。
コストを抑えた最適な方法をご提案致しますので、ご興味がありましたら
お気軽にお問合せください。

WORKS

導入事例

ウィズテクノロジーは大阪を拠点に、システム開発の分野で20年の実績を持つパートナー企業です。
業務効率化やDX支援など、さまざまな課題にワンストップで対応。
経験豊富なエンジニアが、企業の成長を技術面からしっかりサポートします。

導入事例一覧を見る
導入事例一覧を見る

RECRUIT

採用情報

未来に、価値ある選択を。

All WhizzTechnologyは、期待を超える価値をともにつくり、より良い未来へ導く仲間を募集しています。