その他

複数のCSVファイルを1つにまとめる方法[No11]

スポンサーリンク

今回は、同じ項目が並んでいる、同じフォーマットのCSVファイルが複数ある場合に、それらを1つのファイルにまとめる方法を紹介します。

紹介するにあたって、1つ特定のCSVファイルを例に用いています。ご自分が実際に使用するファイルや状況によっては、今回例示する方法を適宜変更して活用する必要があることを、あらかじめ理解頂ければと思います。

方法1:バッチファイルを作成して行う方法

手順1.

好きな場所に新しいフォルダを作成し、そのフォルダ内に下記のような同じフォーマットのファイルを用意します。
「項目名.csv」には各ファイルと同じ先頭行だけを記載します。

  • 項目名.csv
  • ファイル(項目1).csv
  • ファイル(項目2).csv
  • ファイル(項目3).csv
  • ファイル(項目4).csv
  • ファイル(項目5).csv

スポンサーリンク

手順2.

テキストエディターで下記のファイル(バッチファイル)を作成します。
作成したバッチファイルは、1で作成したフォルダに拡張子cmdにして保存して下さい。


@echo off

SET cdPath=%~dp0

FOR /F "tokens=* usebackq" %%i IN ("%cdPath%ファイル内の先頭行.csv") DO @echo %%i> "%cdPath%結合後ファイル.csv"
FOR /F "skip=1 tokens=* usebackq" %%i IN ("%cdPath%ファイル(項目1).csv") DO @echo %%i> "%cdPath%結合後ファイル.csv"
FOR /F "skip=1 tokens=* usebackq" %%i IN ("%cdPath%ファイル(項目2).csv") DO @echo %%i> "%cdPath%結合後ファイル.csv"
FOR /F "skip=1 tokens=* usebackq" %%i IN ("%cdPath%ファイル(項目3).csv") DO @echo %%i> "%cdPath%結合後ファイル.csv"
FOR /F "skip=1 tokens=* usebackq" %%i IN ("%cdPath%ファイル(項目4).csv") DO @echo %%i> "%cdPath%結合後ファイル.csv"
FOR /F "skip=1 tokens=* usebackq" %%i IN ("%cdPath%ファイル(項目5).csv") DO @echo %%i> "%cdPath%結合後ファイル.csv"

〇コマンドを簡単に解説(沢山あるので下記を今回は取り上げます。)

  • tokens:Coming Soon
  • usebackq:Coming Soon
  • %~dp0:Coming Soon

手順3.

手順2で作成したバッチファイルをダブルクリックし、中身を確認します。
同じフォルダ内に「結合後ファイル.csv」が作成され、開くと1つにまとまっていることを確認して下さい。

確認してみて、もし上手くいっていなければ、バッチファイルの文字コードセットがSJIS以外で保存されていないか確認してみて下さい。SJIS以外の文字コードで保存されていると、バッチ実行中にファイル名が文字化けして正常に処理されないことがあります。

この確認はメモ帳ではできないので、それ以外のテキストエディター(例:サクラエディタ)で確認することになります。

スポンサーリンク

方法2

次にご紹介する方法は、方法1をパワーアップし、より効率化を実現した方法です。

方法1の手順2で作成したバッチファイルは、ファイル名を1つずつ書いていましたが、方法2では「リスト.txt」に書いてある項目を1つずつFor文でループ処理させます。過程は異なりますが、処理結果は方法1と同じになります。

今回は方法が伝わりやすいように簡単なプログラムで例示していますが、大規模なプログラムになると、1つのファイルを複数のファイルで参照する作り方をすることで、複数個所に同じ内容を書かなくて済んだり、追加・削除が発生した際に修正しやすかったりする利便性の良さが際立つでしょう。

手順1.

方法1の手順1と同様にファイルを用意します。

手順2.

方法1の手順2と同様に下記ファイルを作成します。


@echo off

SET cdPath=%~dp0

FOR /F "tokens=* usebackq" %%i IN ("%cdPath%ファイル内の先頭行.csv") DO @echo %%i> "%cdPath%結合後ファイル.csv"
FOR /F "delims=" %%a in (%cdPath%リスト.txt) do (
  FOR /F "skip=1 tokens=* usebackq" %%i IN ("%cdPath%ファイル(%%a).csv") DO @echo %%i> "%cdPath%結合後ファイル.csv"
)

〇コマンドを簡単に解説(沢山あるので下記を今回は取り上げます。)

  • "delims=":Coming Soon

手順3.

方法1の手順3と同様にバッチファイルの中身を確認します。

スポンサーリンク

Excelファイルから「リスト.txt」を作成する方法

「リスト.txt」はテキストファイルです。テキストファイルのままだと、通常はファイルのソートを行うことができず、複数品で管理したい場合などに管理しにくくなることがあります。

そこで最後に、Excelファイルから「リスト.txt」を作成する方法をご紹介したいと思います。エクセルで管理すると、マクロを実行させることでエクセルに書いた内容をテキストファイルに起こすことが可能になります。

手順1.

任意の場所に新規でExcelファイルを作成します。
ファイルを保存する際は、マクロ実行可能なファイル形式のxlsmで保存して下さい。

注意:「リスト.txt」がある場所にExcelファイルを作成する場合、今後Excelファイルを実行することで上書きされるようになります。

手順2.

次のように「Sheet1」に記載します。

手順3.

VBAを開き、画像6のマクロを追加してマクロを実行します。
ファイルと同じ階層に「リスト.txt」が作成されます。必要に応じてマクロは変更して下さい。


Option Explicit

Public Sub outputText()
            
    Dim iRow As Integer
    iRow = 2
    Dim iColumn As Integer
    iColumn = 1
    
    Dim SheetName As String
    SheetName = "Sheet1"
    Dim FileName As String
    FileName = "リスト.txt"
    
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(SheetName)
    Dim File As String
    File = ThisWorkbook.Path & "\" & FileName

    Open File For Output As #1
    Do While ws.Cells(iRow, iColumn).Value <> ""
        Print #1, ws.Cells(iRow, iColumn).Value
        iRow = iRow + 1
    Loop
    Close #1

End Sub

最後までお付き合いいただきありがとうございます!

この情報が誰かの役にたてれば幸いです。

スポンサーリンク

-その他