Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Excelマクロ】複数ファイルのシートを自動で1つにまとめる方法

Excelマクロ】複数ファイルのシートを自動で1つにまとめる方法【コピペOK】

はじめに

複数のExcelファイルを手作業でコピー&ペーストして1つにまとめるのは、とても面倒ですよね。
今回紹介するVBAマクロを使えば、フォルダ内の全Excelファイルのシートを自動で結合できます。
作業時間はほんの数秒。毎月の定型業務や大量データ処理に最適です。


1. 完成イメージ

  1. まとめたいファイルを1つのフォルダに入れる

  2. マクロを実行する

  3. 全シートの内容が1つのブックに順番に追加される


2. マクロコード(コピペOK)

 
Sub MergeExcelFiles()

Dim FolderPath As String
Dim FileName As String
Dim wb As Workbook
Dim ws As Worksheet
Dim pasteWb As Workbook
Dim pasteWs As Worksheet
Dim LastRow As Long
Dim PasteRow As Long

' ▼フォルダ選択ダイアログ
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "結合したいファイルが入ったフォルダを選択してください"
If .Show = -1 Then
FolderPath = .SelectedItems(1) & "\"
Else
Exit Sub
End If
End With

' ▼結果を貼り付ける新しいブックを作成
Set pasteWb = Workbooks.Add
Set pasteWs = pasteWb.Sheets(1)
PasteRow = 1

' ▼フォルダ内のExcelファイルを順番に処理
FileName = Dir(FolderPath & "*.xls*")
Application.ScreenUpdating = False
Do While FileName <> ""
' ファイルを開く
Set wb = Workbooks.Open(FolderPath & FileName)
' 各シートの内容をコピー
For Each ws In wb.Sheets
LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
ws.Range("A1:A" & LastRow).EntireRow.Copy pasteWs.Cells(PasteRow, 1)
PasteRow = pasteWs.Cells(pasteWs.Rows.Count, "A").End(xlUp).Row + 1
Next ws
wb.Close False
FileName = Dir
Loop

Application.ScreenUpdating = True
MsgBox "結合が完了しました!", vbInformation

End Sub
 

3. 使い方

  1. 新しいExcelブックを開く(このマクロを入れるためのブック)

  2. Alt + F11 でVBAエディタを開く

  3. メニューから 挿入 → モジュール を選択

  4. 上記のコードを貼り付ける

  5. F5 で実行し、フォルダを選択する

  6. 自動で結合された結果が新しいブックに出力されます


4. 注意点

  • 同じシート名があっても上書きされず、順番に追加されます

  • マクロ実行用のブックは、結合対象のフォルダには入れないでください

  • .xlsx / .xls / .xlsm に対応しています

  • 各シートの書式はコピーされますが、必要に応じて値貼り付けに変更可能です


5. 応用例

  • シートを結合ではなく「縦に1枚にまとめる」ように変更

  • ある列のデータだけを抜き出して結合

  • ファイル名を結合結果の横に追加(どのファイルのデータか識別できる)


まとめ

  • フォルダを選ぶだけで、複数のExcelファイルを一瞬で結合できる

  • 定型業務の自動化や効率化に強力

  • コードはコピペOK、初心者でもすぐ使える