Third-gig

Stats of My Life

複数のExcelファイルを簡単にマージする方法を紹介!

 

 

複数のエクセルファイルをマージする方法を書きました。自分がこれを使って作業が楽になったので共有します。

Public Sub fileMerge()

 

Dim wb As Workbook

Dim sh As Worksheet

Dim rg(1) As Range '0=ThisWorkbook,1=OpenWorkbook

 

Dim fName As Variant 'ファイル名称(配列)

Dim fCount As Integer 'ファイル数

 

Dim endRow(1) As Long '0=ThisWorkbook,1=OpenWorkbook

Dim i As Integer

 

'カレントディレクトリをブックのパスに指定する(※1必要ない場合は削除可)

CreateObject("WScript.Shell").CurrentDirectory = ThisWorkbook.Path

 

'結合するファイルを選択する(Ctrl+クリックで複数ファイル選択可)

fName = Application.GetOpenFilename("エクセルファル,*.xlsx", , "結合ファイル選択", , True)

 

'ファイルが選択されていない場合は、終了

If Not IsArray(fName) Then Exit Sub

 

'このブックの最終行を取得 UBound・・・配列の大きさを返す

fCount = UBound(fName) 'ファイル数取得

 

'タイトル作成

Set sh = ThisWorkbook.Sheets("Sheet1")

sh.Cells.Clear

sh.Cells(1, 1).Value = "A"

sh.Cells(1, 2).Value = "B"

sh.Cells(1, 3).Value = "C"

sh.Cells(1, 4).Value = "D"

sh.Cells(1, 5).Value = "E"

sh.Cells(1, 6).Value = "F"

sh.Cells(1, 7).Value = "G"

sh.Cells(1, 8).Value = "H"

sh.Cells(1, 9).Value = "I"

 

'ファイル数だけループ処理

For i = 1 To fCount

'このブックの最終セルを取得

Set rg(0) = sh.Cells(Rows.Count, 1).End(xlUp).Offset(1)

Set wb = Workbooks.Open(fName(i)) 'ファイルを開く

 

With wb.Sheets("Sheet1")

endRow(1) = .Cells(Rows.Count, 1).End(xlUp).Row '最終行取得 xlUPが最終行

'結合するセル範囲を取得

 

Set rg(1) = .Range(.Cells(2, 1), .Cells(endRow(1), 10)) '2行目から最終行のA~I列

End With

 

'コピー処理

rg(1).Copy rg(0)

wb.Close

Next i

Set wb = Nothing

Set sh = Nothing

 

Erase rg

Erase fName

End Sub