Consulting

Results 1 to 4 of 4

Thread: Macro to merge data from 100 worbooks in a folder

  1. #1
    VBAX Newbie
    Joined
    Mar 2012
    Posts
    3
    Location

    Macro to merge data from 100 worbooks in a folder

    Hi,

    I have around 100 workbooks in a folder. Each of these workbooks have 2 sheets, Summary and Analysis. I want a macro to merge the Analysis worksheet from these 100 workbooks into one workbook.The column structure in all the Analysis sheets are the same.I've tried a couple of macros but none of them seem to work according to my requirement.

    Any help would be appreciated.

  2. #2
    VBAX Regular
    Joined
    Mar 2012
    Posts
    12
    Location
    This should get you started.

    [VBA]Sub OpenallFilesCopyandPaste()
    Dim strPath As String
    Dim strFile As String
    Dim strName As String

    'store your file path
    sPath = "C:\users\jonathan\desktop\"
    sFil = Dir(sPath & "*.xls")

    Do While sFil <> ""
    strName = strPath & strFile
    Workbooks.Open (strName)

    'specify range to copy for summary tab
    Sheets("Summary").Range(Range("A1"), Range("A1").End(xlDown)).Copy

    'paste into summary tab of thisworkbook
    ThisWorkbook.Activate
    If Sheets("Summary").Len(Range("A1")) = 0 Then
    Sheets("Summary").Range("A1").PasteSpecial (xlPasteAll)
    Else:
    Sheets("Summary").Range("A1").End (xlDown)
    ActiveCell.Offset(1, 0).PasteSpecial (xlPasteAll)
    End If

    'specify range to copy for analysis tab
    Sheets("Analysis").Range(Range("A1"), Range("A1").End(xlDown)).Copy

    'paste into analysis tab of thisworkbook
    ThisWorkbook.Activate
    If Sheets("Analysis").Len(Range("A1")) = 0 Then
    Sheets("Analysis").Range("A1").PasteSpecial (xlPasteAll)
    Else:
    Sheets("Analysis").Range("A1").End (xlDown)
    ActiveCell.Offset(1, 0).PasteSpecial (xlPasteAll)
    End If

    Workbooks(sFil).Close (False)
    strFile = Dir
    Loop

    End Sub[/VBA]

    -jonhaus

  3. #3
    VBAX Guru mancubus's Avatar
    Joined
    Dec 2010
    Location
    "Where I lay my head is home" :D
    Posts
    2,644
    hi icon.

    wellcome to VBAX.


    replace
    MyPath = "C:\Users\xxx\yyy"
    with your files' location...
    (add headers to the final sheet manually)

    [VBA]
    Sub Basic_Example_1()
    'http://www.rondebruin.nl/copy3.htm

    Dim MyPath As String, FilesInPath As String
    Dim MyFiles() As String
    Dim SourceRcount As Long, Fnum As Long
    Dim mybook As Workbook, BaseWks As Worksheet
    Dim sourceRange As Range, destrange As Range
    Dim rnum As Long, CalcMode As Long, LR As Long, LC As Long

    'Fill in the path\folder where the files are
    MyPath = "C:\Users\xxx\yyy"

    'Add a slash at the end if the user forget it
    If Right(MyPath, 1) <> "\" Then
    MyPath = MyPath & "\"
    End If

    'If there are no Excel files in the folder exit the sub
    FilesInPath = Dir(MyPath & "*.xl*")
    If FilesInPath = "" Then
    MsgBox "No files found"
    Exit Sub
    End If

    'Fill the array(myFiles)with the list of Excel files in the folder
    Fnum = 0
    Do While FilesInPath <> ""
    Fnum = Fnum + 1
    ReDim Preserve MyFiles(1 To Fnum)
    MyFiles(Fnum) = FilesInPath
    FilesInPath = Dir()
    Loop

    'Change ScreenUpdating, Calculation and EnableEvents
    With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
    End With

    'Add a new workbook with one sheet
    Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
    rnum = 2

    'Loop through all files in the array(myFiles)
    If Fnum > 0 Then
    For Fnum = LBound(MyFiles) To UBound(MyFiles)
    Set mybook = Nothing
    On Error Resume Next
    Set mybook = Workbooks.Open(MyPath & MyFiles(Fnum))
    On Error GoTo 0
    If Not mybook Is Nothing Then
    On Error Resume Next
    With mybook.Worksheets("Analysis")
    LR = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
    LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
    If LR < 2 Then 'only headers, no data, skip
    mybook.Close savechanges:=False
    GoTo SkipThisBook
    End If
    Set sourceRange = .Range(.Cells(2, 1), .Cells(LR, LC))
    End With
    If Err.Number > 0 Then
    Err.Clear
    Set sourceRange = Nothing
    Else
    'if SourceRange use all columns then skip this file
    If sourceRange.Columns.Count >= BaseWks.Columns.Count Then
    Set sourceRange = Nothing
    End If
    End If
    On Error GoTo 0
    If Not sourceRange Is Nothing Then
    SourceRcount = sourceRange.Rows.Count
    If rnum + SourceRcount >= BaseWks.Rows.Count Then
    MsgBox "Sorry there are not enough rows in the sheet"
    BaseWks.Columns.AutoFit
    mybook.Close savechanges:=False
    GoTo ExitTheSub
    Else
    'Copy the file name in column A
    With sourceRange
    BaseWks.Cells(rnum, "A").Resize(.Rows.Count).Value = MyFiles(Fnum)
    End With
    'Set the destrange
    Set destrange = BaseWks.Range("B" & rnum)
    'we copy the values from the sourceRange to the destrange
    With sourceRange
    Set destrange = destrange.Resize(.Rows.Count, .Columns.Count)
    End With
    destrange.Value = sourceRange.Value
    rnum = rnum + SourceRcount
    End If
    End If
    mybook.Close savechanges:=False
    End If
    Next Fnum
    BaseWks.Columns.AutoFit
    End If

    ExitTheSub:

    'Restore ScreenUpdating, Calculation and EnableEvents
    With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = CalcMode
    End With

    End Sub

    [/VBA]
    PLS DO NOT PM; OPEN A THREAD INSTEAD!!!

    1) Posting Code
    [CODE]PasteYourCodeHere[/CODE]
    (or paste your code, select it, click # button)

    2) Uploading File(s)
    Go Advanced / Attachments - Manage Attachments / Add Files / Select Files / Select the file(s) (multiple files can be selected while holding Ctrl key) / Upload Files / Done
    Replace company specific / sensitive / confidential data. Include so many rows and sheets etc in the uploaded workbook to enable the helpers visualize the data and table structure. Helpers do not need the entire workbook.

    3) Testing the Codes
    always back up your files before testing the codes.

    4) Marking the Thread as Solved
    from Thread Tools (on the top right corner, above the first message)

  4. #4
    VBAX Newbie
    Joined
    Mar 2012
    Posts
    3
    Location
    Thank you so much for your replies.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •