+ Reply to Thread
Results 1 to 6 of 6

Thread: Combine multiple ranges from different workbooks

  1. #1
    Valued Forum Contributor
    Join Date
    01-05-2010
    Location
    New York
    MS-Off Ver
    Excel 2010
    Posts
    706

    Combine multiple ranges from different workbooks

    I found the following code that merges one range from all workbooks in a folder into one new worksheet. As of now, the code is copying the range ("B4:L4") on the third tab of every workbook. Is there a way to modify this code to also copy the ranges ("P4:R4") and ("V4:AA4")? Essential I want to be able to copy multiple ranges instead of just one.

    
    Sub MergeAllWorkbooks()
        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
    
        ' Change this to the path\folder location of your files.
        MyPath = "Z:\My Documents\Analyst Recommendations\Top Analysts\Analysts Results\JP Morgan\Test"
    
        ' Add a slash at the end of the path if needed.
        If Right(MyPath, 1) <> "\" Then
            MyPath = MyPath & "\"
        End If
    
        ' If there are no Excel files in the folder, exit.
        FilesInPath = Dir(MyPath & "*.xl*")
        If FilesInPath = "" Then
            MsgBox "No files found"
            Exit Sub
        End If
    
        ' Fill the myFiles array with the list of Excel files
        ' in the search folder.
        FNum = 0
        Do While FilesInPath <> ""
            FNum = FNum + 1
            ReDim Preserve MyFiles(1 To FNum)
            MyFiles(FNum) = FilesInPath
            FilesInPath = Dir()
        Loop
    
        ' Set various application properties.
        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 = 1
    
        ' Loop through all files in the myFiles array.
        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
    
                    ' Change this range to fit your own needs.
                    With mybook.Worksheets(3)
                        Set sourceRange = .Range("B4:L4")
                    End With
    
                    If Err.Number > 0 Then
                        Err.Clear
                        Set sourceRange = Nothing
                    Else
                        ' If source range uses 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 "There are not enough rows in the target worksheet."
                            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 destination range.
                            Set destrange = BaseWks.Range("B" & rnum)
    
                            ' Copy the values from the source range
                            ' to the destination range.
                            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 the application properties.
        With Application
            .ScreenUpdating = True
            .EnableEvents = True
            .Calculation = CalcMode
        End With
    End Sub

  2. #2
    Forum Moderator Paul's Avatar
    Join Date
    02-05-2007
    Location
    Wisconsin
    MS-Off Ver
    2007
    Posts
    5,953

    Re: Combine multiple ranges from different workbooks

    Is your plan to copy the three ranges, but still only compare/modify the original range (B4:L4)? Copying multiple ranges is as simple as writing three copy statements in your code. Using three separate source ranges/destination ranges, this shouldn't be an issue. (Using one would probably not be advised, since you're dealing with ranges of differing dimensions and locations.)

  3. #3
    Valued Forum Contributor
    Join Date
    01-05-2010
    Location
    New York
    MS-Off Ver
    Excel 2010
    Posts
    706

    Re: Combine multiple ranges from different workbooks

    I am not exactly sure what you mean by compare/modify the original range (B4:L4). How can I change the code to include multiple source ranges/destination ranges? If you can just show me how to add one more then im sure I can figure out how to add the third. Thank you very much for your help I am still learning the basics of vba.

  4. #4
    Forum Moderator Paul's Avatar
    Join Date
    02-05-2007
    Location
    Wisconsin
    MS-Off Ver
    2007
    Posts
    5,953

    Re: Combine multiple ranges from different workbooks

    Do you know what your code does? It isn't just copying B4:L4 willy nilly. It's not actually copying the data at all using the normal copy/paste method. It's comparing the number of rows and columns in that range to the destination range to see if it will fit, and if so it sets the cell values of the destination range equal to the cell values of the source range.

    To have three ranges, you could Dim three variables (sourcerange1, sourcerange2, sourcerange3) and set them equal to the three ranges. You can then Dim three destination variables (destrange1, destrange2, destrange3) and either copy paste source1 to dest1, source2 to dest2, etc. or use the method you're currently using (dest1 = source1, dest2 = source2, etc.).

    If you need to check for fit, or position the other source ranges based on row counts or last used rows/columns, you'll have to add that code.

  5. #5
    Valued Forum Contributor
    Join Date
    01-05-2010
    Location
    New York
    MS-Off Ver
    Excel 2010
    Posts
    706

    Re: Combine multiple ranges from different workbooks

    Thank you for your explanation, so just add the additional source and dest ranges and then anywhere in the code where I see sourceRange add sourcerange2 and sourcerange3 and destrange2 and destrange3?

  6. #6
    Valued Forum Contributor
    Join Date
    01-05-2010
    Location
    New York
    MS-Off Ver
    Excel 2010
    Posts
    706

    Re: Combine multiple ranges from different workbooks

    Forget that last question I figured it out. One last question.

    Right now the code is opening up a new workbook to copy the data into. How can I change it to copy to a workbook called "Test" that I already have.

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

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

Search Engine Friendly URLs by vBSEO 3.2.0