複数ファイルを1ファイルにまとめるには

ここでは指定フォルダの中にあるテキストファイルを1ファイルにまとめる方法を紹介します。

VBAを使わなくても、ほとんどの場合はコマンドプロンプトでtypeコマンドを使えば複数ファイルを1ファイルにまとめることが出来ます。

例えば、a.txt、b.txt、c.txtの3ファイルがあったとして、それをall.txtというファイルにまとめてしまいたい場合は、コマンドプロンプトで「type *.txt > all.txt」と入力してEnterを押せば終わりです。1ファイルずつ「type a.txt b.txt c.txt > all.txt」と指定して、入力+Enterでも同様です。

細かいことを言えば、ファイルがあるフォルダまで「cd C:\aaa\」のようにcdコマンドで移動する必要はありますが、それでも作業は簡単に終わります。ほとんどの場合はこれで対応可能です。

ただ、typeコマンドでのファイル結合は、素直にファイルの内容をくっつけるだけのため、元ファイルの最終行に改行がない場合は、改行されないまま結合されてしまいます。

結合前後で完全一致させたい場合など、その方が都合がいい場合もありますが、1ファイルにまとめたい場合はファイルごとに改行したうえで結合させたいことの方が多いため、以下ではそれを考慮した方法を紹介します。

事前設定

以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。

FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。

詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。


コード

以下のコードは、指定フォルダにあるファイルを引数で指定したファイル名の1ファイルにまとめます。まとめるファイルは同じフォルダに作成します。ファイルを結合する際にファイルの末端に改行コードが無い場合は改行コードを付与します。

対象とするファイルは拡張子がtxtまたはTXTのテキストファイルに限定しています。処理内で拡張子の判定を行っている箇所がありますが、そこを変えれば他の拡張子も結合対象にすることが可能です。

処理内容は大体コメントに書いているのでそちらをご参照ください。

使い方

上の関数の引数にファイルがおいてあるフォルダパスと、まとめたあとのファイル名を指定して実行します。実行すると、指定フォルダ内にある全てのテキストファイルの内容を結合させて、1ファイルで作成します。

注意点

上にも少し書いていますが、テキストファイルの終端が改行コードでない場合は、まとめる先のファイルに書き込む際に改行コードも書き込んでいます。

そのため、元の各テキストファイルの総ファイルサイズと、まとめたファイルのファイルサイズが付与した改行コードの分だけ一致しないことがあります。

元の各テキストファイルとまとめたファイルを完全一致させたい場合は上記VBAのコードではなく、冒頭のtypeコマンドでのファイル結合を行ってください。