Maybe this method will run a bit faster.
'http://analystcave.com/merge-csv-files-or-txt-files-in-a-folder/
Sub Test_MergeFiles()
Dim fileNames(0 To 1) As String
fileNames(0) = "C:\somefolder\test.csv"
fileNames(1) = "C:\somefolder\test1.csv"
MergeFiles fileNames, "C:\Merged.csv", True, False
End Sub
'http://www.excelforum.com/excel-programming-vba-macros/1161879-merge-select-csv-txt-files.html
Sub AlphaFrog()
Dim s() As String, i As Long, fn As String
fn = ThisWorkbook.Path & "\Merged.csv"
' Prompt user to select files
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = ThisWorkbook.Path ' Default path
.FilterIndex = 6 'CSV files
.Title = "Please Select CSV Files to Merge (Ctrl+Click to multi-select files)"
'.ButtonName = "Open"
.AllowMultiSelect = True
.Show
If .SelectedItems.Count = 0 Then Exit Sub ' User clicked cancel
'Convert poke variant array data to string array.
ReDim s(1 To .SelectedItems.Count) As String
For i = 1 To .SelectedItems.Count
s(i) = .SelectedItems(i)
Next i
End With
MergeFiles s(), fn
Shell "cmd /c " & fn, vbNormal
End Sub
'http://analystcave.com/merge-csv-files-or-txt-files-in-a-folder/
Sub MergeFiles(fileNames() As String, newFileName As String, Optional headers As Boolean = True, Optional addNewLine As Boolean = False)
Dim fileName As Variant, textData As String, fileNo As Integer, result As String, firstHeader As Boolean
firstHeader = True
For Each fileName In fileNames
fileNo = FreeFile
Open fileName For Input As #fileNo
textData = Input$(LOF(fileNo), fileNo)
Close #fileNo
If headers Then
'result = result & IIf(addNewLine, vbNewLine, "") & IIf(firstHeader, textData, right(textData, Len(textData) - InStr(textData, vbNewLine)))
result = result & IIf(addNewLine, vbNewLine, "") & IIf(firstHeader, textData, Right(textData, Len(textData) - InStr(textData, vbNewLine) - 1))
firstHeader = False
Else
result = result & IIf(addNewLine, vbNewLine, "") & textData
End If
Next fileName
fileNo = FreeFile
Open newFileName For Output As #fileNo
Print #fileNo, result
Close #fileNo
End Sub