Macro Creates Excel Pivot Table From Multiple Files

Pivot Table From Multiple Files

If you want to create a pivot table from data on different worksheets, you can use a Multiple Consolidation Ranges pivot table. However, that creates a pivot table with limited features and functionality.

Last year, Excel MVP Kirill Lapin (aka KL) shared his brilliant code to create a Union query and build a fully functional pivot table from data on different worksheets.

More Pivot Table Macros

Now, Kirill is back to share two more pivot table macros, and I’m sure you’ll be impressed by both of them. In today’s example, he’s written a macro to create a pivot table from multiple Excel files.

This is based on a solution that Kirill posted in one of Russian-speaking Excel forums for generating a standard pivot table from multiple workbooks (as opposed to worksheets in the same workbook).

The Report Workbook

The main file is named Report.xls, and it contains Kirill’s pivot table code, and a button that runs the macro. When you open the file, enable the macros, then click the Create Pivot button.

pivotwkbk01

The Data Files

When you run Kirill’s macro, it prompts you to select one or more data files, all stored in the same folder. In this example, the files for Alberta, Ontrio and Yukon are selected.

List of Data Files
List of Data Files

All of the data files must have the same structure, and the macro works with the data stored on Sheet1 in each file. In the screen shot below you can see Sheet1 in the Alberta and Ontario files, which have identical column headings.

pivotwkbk03

The Pivot Table

After you select the files and click Open, the macro creates a pivot table based on the data from Sheet1 in each of the selected files. Because the pivot table is based on a Union query, and not built from Multiple Consolidation Ranges, it’s a fully functioning pivot table, and you can pivot, group and filter the data, as usual.

You can also refresh the pivot table, to show the latest data in the source files, as long as those files stay in their original location.

pivotwkbk04

The Union Query

Kirill’s macro creates a Union query to combine the data from all the selected files. If you open Microsoft Query, you can see the SQL string for the Union query, and all the data from the selected workbooks.

SQL string for the Union query
SQL string for the Union query

Download the Sample File

To see Kirill’s pivot table code, you can download the Pivot Workbooks example. The zipped folder that contains the Report.xls file, and the five sample data files.

Unzip the folder, and keep all the files in the same folder. When you open the Report.xls file, enable macros to run the code.

Pivot Table Macro #2

Come back on Wednesday to see Kirill’s second pivot table macro. It’s another creative twist on creating a pivot table from data in different workbooks.
______________

34 thoughts on “Macro Creates Excel Pivot Table From Multiple Files”

  1. Excellent! This is just the kind of routine I was planning on building.

    The only difference in approach is that I want to update an existing PT rather than creating a new one. Thanks Debra and Kirill.

  2. Thanks to you and Kirill for this and the previous, multiple worksheets, post that I hadn’t seen before. He makes it look so easy! I was wondering why the first part of the SQL Union query string only refers to “Sheet1? not the full workbook path. It seems to be that the DBQ argument to the the connection string refers to the full path and so it’s not needed for the first workbook. Just for fun, I modified the code so that the first Sheet1 also has the path, like this:

    If strSQL = “” Then
    strSQL = “SELECT * FROM ‘” & arrFiles(i) & “‘.[” & strSheet & “$]”
    Else
    strSQL = strSQL & ” UNION ALL SELECT * FROM ‘” & arrFiles(i) & “‘.[” & strSheet & “$]”
    End If

    and it also works.

    Great stuff!

  3. Not specific to Kirill’s multi-book query, but to the SQL query method: I am discovering that this technique requires stronger data typing than is common in most (of my) Excel sheets. Specifically, its important to maintain data types in the same column.

    Any advice for managing this??

  4. Hi AlexJ,
    The solution would greatly depend on what the actual data type mix you have. Can you give a specific example of the data types you might have in a given column of a source table? Except for the typical combination of any single type with NULL, I can’t imagine any mix that would make sense from the top of my head. Also, the question would be: how do you intend to use mixed data types in a Pivot Table (with or without SQL) in the first place?
    Reagrds.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.