本投稿ではエクセルでファイルを結合するマクロのご紹介します。
ファイルを結合するマクロの使用目的
みなさん、仕事や学校で大量のエクセルファイルをもらうことがあるかと思います。
たくさんのエクセルファイルに分かれていると、一つ一つ見るたびにエクセルファイルを開く必要があり大変です。特に実験データなどの一つ一つのファイルのデータ点数が多いものは開くだけでも大変です。
便利に扱うためにファイル一つにまとめたことがある人もいるでしょう。ファイルの量が少ない場合にはそれでも良いかもしれませんが、多い場合には大変時間のかかる作業になります。
今回ご紹介するのは、フォーマットが決まっているファイルを一つのファイルのシートに結合していくマクロになります。マクロの使用で作業効率が向上します。
フォーマットが決まっているファイルとしては、自由記入式のアンケートなどや実験結果などを想定しています。


VBAコード紹介
今回紹介するコードはEX-ITさんのコードに少し追加しただけのものになります。そのため、詳細説明はEX-ITさんのページを参照してください。もし、コード削除の依頼があれば差分だけ紹介します。
Sub folder()
If Application.FileDialog(msoFileDialogFolderPicker).Show = True Then
Range("b2").Value = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
End If
End Sub
Sub merge()
'シート[merge]を削除
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("merge").Delete
Application.DisplayAlerts = True
'シート[merge]を一番右に追加
Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "merge"
'フォルダの場所を変数に入れる
Dim Folder_path
Folder_path = ThisWorkbook.Worksheets("folder").Range("b2").Value
'結合するブックを変数に入れる
Dim FileType
If Worksheets("folder").Range("b1").Value = "Excel" Then
FileType = "\*.xls*"
Else
FileType = "\*.csv"
End If
Dim MergeWorkbook
MergeWorkbook = Dir(Folder_path & FileType)
'削除用追記1
Dim hoge
hoge = 0
'指定したフォルダから、ファイルを探して、開いてコピペ
Do Until MergeWorkbook = ""
Workbooks.Open Filename:=Folder_path & "\" & MergeWorkbook
Dim MergeWorkbook_data '結合するブック内のシートのデータ数
Dim ThisWorkbook_data '結合先のシートのデータ数
Dim i
For i = 1 To Workbooks(MergeWorkbook).Worksheets.Count
MergeWorkbook_data = Workbooks(MergeWorkbook).Worksheets(i).Range("a" & Rows.Count).End(xlUp).Row
ThisWorkbook_data = ThisWorkbook.Worksheets("merge").Range("a" & Rows.Count).End(xlUp).Row
Workbooks(MergeWorkbook).Worksheets(i).Rows("1:" & MergeWorkbook_data).Copy ThisWorkbook.Worksheets("merge").Range("a" & ThisWorkbook_data + 1)
'削除用追記2
hoge = hoge + 1
If hoge > 1 Then
ThisWorkbook.Worksheets("merge").Range(ThisWorkbook_data + 1 & ":" & ThisWorkbook_data + 5).Delete
End If
Next
'結合するブックを閉じる
Application.DisplayAlerts = False
Workbooks(MergeWorkbook).Close
Application.DisplayAlerts = True
'次のブックを探しに行く
MergeWorkbook = Dir()
Loop
End Sub
元のコードだと、”研修についてのアンケート”、”悪かった点”、”改善案”という部分も含めて一つのセルにまとまってしまうので、緑色の部分を追記しました。グラフ作成時に文字データが入ってしまうと、グラフ表示がおかしくなるからです。
mergeの赤色の部分でファイル先頭の不要部分の行数を指定します。上の研修アンケートの例だと、先頭の1~5行目は最初の一回以外は不要ですよね。
使用手順は以下のようになります。
folderというマクロとmergeというマクロの2個を利用します。
①結合したいファイルを一つのフォルダにまとめて保存してください。
②不要な先頭行数をコードの赤色部分に入力。
②ファイル結合用bookを作成し、”folder”という名前のシートを作成。
③”folder”シートのb2セルにfolderマクロあるいは手入力で結合元ファイルを保存したフォルダのディレクトリ入力。
④mergeマクロ実行。
⑤”merge”シートが作成され、複数ファイルが結合されたシートが作成される。
もし、結合する順番にこだわりがあるのならば、結合元ファイルの名称が順番になるように、頭に数字を入れるなどの工夫してください。
おわりに
今回はファイルを結合するマクロを紹介しました。職場や学校などのPCの性能が悪い人ほど今回のコードで作業効率向上が期待できます。
VBAは大学で習わない場合の方が多いので、抵抗のある人が多いと思いますが、意外と簡単なので使ってみてはどうでしょうか。
コメント