# Excel Merge Tables From Different Sheets

In the Load To dialogbox select Only Create Connectionand click Load. After doing this for both sheets, you should now see the following two queries in the Workbook Queries pane. Right-click on the Table1 query and select Append. Select Table2 in the bottom dropdown box. Here are the steps to combine multiple worksheets with Excel Tables using Power Query: Go to the Data tab. In the Get & Transform Data group, click on the ‘Get Data’ option. Go the ‘From Other Sources’ option.

A good database is always structured. It means different entities have different tables. Although, Excel is not a database tool but is often used to maintain small chunks of data.

Many times we get the need of merging tables in order too see a relationship and churn out some useful information.

In databases like SQL, Oracle, Microsoft Access, etc, it is easy to join tables using simple queries. But in excel we don't have JOINs but we can still join tables in excel. We use Excel Functions to merge and join data tables. Perhaps it is a more customizable merge than SQL. Let’s see the techniques of merging excel tables.

**Merge Data in Excel Using VLOOKUP Function**

To merge data in excel, we should have at least one common factor/id in both tables, so that we can use it as a relation and merge those tables.

Consider these two tables below. How can we combine these data tables in Excel?

The Order Table has order details and the Customer table contains customer details. We need to prepare a table that tells which order belongs to which customer name, customer’s points, house number, and his joining date.

The common id in both tables is **Cust.ID** which can be used for merging tables in excel.

There are three methods of merging tables using VLOOKUP Function.

**Retrieve Each Column With Column Index**

In this method, we will use simple VLOOKUP to add these tables in one table. So to retrieve name write this formula.

[**Customers** is Sheet1!$I$3:$M$15.]

To merge points in table, write this formula.

**Customers**,3,0)

To merge house no in table, write this formula.

Here we merged two tables in excel, each column one by one in the table. This is useful when you have only few columns to merge. But when you have multiple columns to merge, this is can be a hectic task. So to merge multiple tables we have different approaches.

**Merge Tables Using VLOOKUP and ****COLUMN Function****.**

When you want to retrieve multiple adjacent columns, use this formula.

**VLOOKUP**(lookup_value,

**table_array**,

**COLUMN()**-n,0)

Here the COLUMN function just returns the column numbers in which the formula is being written.

**n** is any number which adjusts the column number in table array,

In our example, the formula for table merging will be:

Once you write this formula, you will not have to write the formula again for other columns. Just copy it in all other cells and columns.**How It Works**

Ok! In the first column, we need a name, which is the second column in customer table.

Here the main factor is **COLUMN()**-2. The COLUMN function returns the column number of current cell. We are writing the formula in D3, hence we will get 4 from COLUMN(). Then we are subtracting 2 which makes 2. Hence finally our formula simplifies to =**VLOOKUP**($B3,**Customers**,**2**,0).

When we copy this formula in E columns we will get the formula as =**VLOOKUP**($B3,**Customers**,**3**,0). Which retrieves 3rd column from customer table.

**Merge Tables Using VLOOKUP-MATCH Function**

This one is my favorite way of merging tables in excel using the VLOOKUP function. In the above example, we retrieved column in serial. But what if we had to retrieve random columns. In that case above Techniques will be useless. The VLOOKUP-MATCH technique uses column headings to merge cells. This is also called VLOOKUP with Dynamic Col Index.

For our example here, the formula will be this.

**Customers**,MATCH(D$2,

**$J$2:$N$2**,0),0)

Here, we are simply using MATCH function to get the appropriate column number. This called Dynamic VLOOKUP.

**Using INDEX-MATCH to Table Merging in Excel**

The INDEX-MATCH is very powerful lookup tool and many time it is referred as better VLOOKUP function. You can use this to for combining two or more tables. This will also allow you to merge columns from left of the table.

This was a quick tutorial about merging and joining tables in excel. We explored several ways of merging two or more tables in excels. Feel free to ask question about this article or any other query regarding excel 2019, 2016, 2013 or 2010 in the comments section below.

**Related Articles:**

**Popular Articles :**

**50 Excel Shortcut to Increase Your Productivity** : Get faster at your task. These 50 shortcuts will make you work even faster on Excel.

**How to use t****he VLOOKUP Function in Excel** : This is one of the most used and popular functions of excel that is used to lookup value from different ranges and sheets.

**How to use the COUNTIF function in Excel** : Count values with conditions using this amazing function. You don't need to filter your data to count specific values. Countif function is essential to prepare your dashboard.

**How to use the SUMIF Function in Excel** : This is another dashboard essential function. This helps you sum up values on specific conditions.

**How do I fill-in a new sheet with data from sheets 2, 3, 4 … when those sheets have different columns (or are in different order)?**

Combining data with different columns? Easier than kitten mittens

Combining data from many sheets into a single sheet? **Love it.**

It’s something you’ll do all the time, and you can check out tutorials on how to accomplish this task when all the sheets have the same column order as well as when you need to skip certain sheets but combine others.

**But what about when you have different columns on each sheet? Or when the columns share similarities, but are in different order?**

It’s a pain in the ass, but by using a **Scripting.Dictionary** to track column names (as Keys) and numbers (as Items) you can ensure that your data lines up appropriately for an easy pivot table.

Let’s check out an example, featuring my favorite sales teams of all time: Dennis, Mac, Frank, Charlie, Sweet Dee, and Artemis from *It’s Always Sunny in Philadelphia*. You’ll notice that the sheets have some columns in order, some shared columns, and some NON-shared (i.e. totally different) columns:

Each sheet has similarities and differences in columns!

Cool!

Before we go any further, you will need to make sure you have the **Microsoft Scripting Runtime** added to this project (if you have not already).

This is how to add the Microsoft Scripting Runtime Reference

This 13-second gif walks you through the steps, but in case it is not working here is a quick step-by-step guide:

- Open the VBA Editor window
- Click “Tools” from the File menu
- Select “References” from within the Tools menu
- Scroll down until you find “Microsoft Scripting Runtime”
- Check the box next to the “Microsoft Scripting Runtime”
- Click OK

Phew! Now we can get back to the task at hand… combining data!

Here’s the scoop y’all — our *It’s Always Sunny* sales data can be combined with this macro:

Here’s a link to the code above so you can review it side-by-side with the walk through below. Right-click, “Open in new window”.

Let’s review the code using the **4-step VBA process** as our guide:

*Step 1 – Setup**Step 2 – Exploration**Step 3 – Execution**Step 4 – Cleanup*

**Step 1 – Setup** is a cinch, and we knock it all out on lines 14-18. We:

- (line 15) Make sure the
**Scripting.Dictionary**is set to**vbTextCompare**, which means the Keys will be case-**IN**sensitive - (line 16) Assign
**lngFinalHeadersCounter**to 1, since we do not have any column headers… yet - (line 17) Assign
**lngFinalHeadersSize**to the**.Count**of**dicFinalHeaders**, because we will need to know when new columns are added (and will use this variable for comparisons) - (line 18) Create a new Worksheet and set it to
**wksDst**— this will be our Destination Worksheet, where all of the data will be combined

Smooth! With our set up out of the way, we’ll accomplish **Step 2 – Exploration** and **Step 3 – Execution** in two phases:

**Phase 1:**assemble the final headers Scripting.Dictionary and prepare the Destination Worksheet**Phase 2:**copy each column from each Worksheet to the appropriate place on our Destination Worksheet

Let’s dive into Phase 1!

The **Step 2 – Exploration** of Phase 1 takes place between lines 26-40.

First, we start looping through all of the Worksheets in ThisWorkbook on line 26, ignoring the Destination Worksheet (**wksDst**) on line 29.

Once we are sure we are NOT on the Destination Worksheet, we identify the last-occupied column on line 35 using **LastOccupiedColNum** from the VBA Toolbelt. You’re using the VBA Toolbelt, right? Please download it, use it as your new project template, and save yourself TONS of repetitive coding…

But let’s move on, as our **Step 2 – Exploration** for Phase 1 is done!

Line 36 kicks off a For…Next loop through this Worksheet’s occupied-columns, which is where our **Step 3 – Execution** takes place for Phase 1. Inside this loop, we will repeat the next 4 steps for each column header:

- (line 40) Assign
**strColHeader**to be the leading-and-trailing-spaces-removed column header name - (line 41) Check
**dicFinalHeaders**to see if it already contains this column name (i.e.**strColHeader**) - (lines 42-43) If that column name is NOT in the Scripting.Dictionary from step #2 above, add it as the Key, with
**lngFinalHeadersCounter**, representing the target column number, added as the Item - (line 44) Increment the
**lngFinalHeadersCounter**variable so the next new column header name points to the next column number

Since we are inside the **For Each wksSrc In ThisWorkbook.Worksheets** loop, those steps are repeated for each Worksheet as well!

The last bit of **Step 3 – Execution** for Phase 1 happens on lines 58-60, which is where we set up the Destination Worksheet with the header column names we just collected.

Line 58 starts by kicking off a For Each loop to iterate through each Key in **dicFinalHeaders**.

Finally, on line 59, we write each header column name to its appropriate column number on **wksDst**, our Destination Worksheet — a cinch, since **dicFinalheaders(varColHeader)** gives us the column number.

Boom! That wraps up Phase 1 and sets us up for an easy Phase 2 — take a moment to celebrate and enjoy this gif of Charlie shooting a gun.

Get excited like Charlie y’all, we’re almost done!

The **Step 2 – Exploration** in Phase 2 takes place between lines 71-85.

Much like Phase 1, we use a For Each loop on line 71 to iterate through each Worksheet, and on line 74 we make sure that the final Destination Worksheet is skipped.

So far, so good!

On lines 80 through 85, we assign three variables to make our copy / paste (which is the next step in Phase 2, Execution) work smoothly:

- (line 80)
**lngLastSrcRowNum**is the last-occupied row on the Source Worksheet, which is where we will copy data FROM - (line 81)
**lngLastSrcColNum**is the last-occupied column on the Source Worksheet, which determines the bounds of our (eventual) loop through all of the data columns - (line 85)
**lngLastDstRowNum**is the last-occupied row on the Destination Worksheet, which is where we will paste data TO

That wraps **Step 2 – Exploration** for Phase 2, which means it’s time to jump into **Step 3 – Execution**!

Line 90 kicks off a For loop through each of the columns on our Source Worksheet. (Remember, we repeat this for each Worksheet that is not the final Destination Worksheet, just like in Phase 1.)

Line 91 assigns **strColHeader**, the name of this particular column header. (We will use this name in the next step, to get the right destination column number from **dicFinalHeaders**.)

Lines 95-96 set **rngDst**, the cell target on our final Destination Worksheet, using two things:

**lngLastDstRowNum**+ 1, since we want to send our data one row below the last-occupied row on the Destination Worksheet- **dicFinalHeaders(strColHeader), which as you know will return the appropriate column number

Easy peasy!

Lines 97-98 set **rngSrc**, the column of data from our Source Worksheet. Since we know the column number (**lngIdx**, as we’re looping through the columns) as well as the last-occupied row on the Source Worksheet (**lngLastSrcRowNum**), we can create this Range using these cells.

And finally, the copy / paste happens on line 104, where we call the Copy method on **rngSrc** with a Destination parameter of **rngDst**.

And with that, you’re done! Time to celebrate y’all, as you have solved a seriously challenging problem in a VERY flexible way.

### Excel Merge Data

The last little bit of this script is our **Step 4 – Cleanup**, which takes place on line 115. All we’re doing here is throwing a MsgBox to the user, letting him or her know that the data has been combined. Wahoo!

Want to see this code in action? Here’s a 12-minute guide to the script, most of which is spent illustrating exactly how each column of data gets lined up appropriately on the Destination Worksheet:

*Are you combining multiple Sheets with out-of-order (or completely different) columns into a single Sheet like a pro? If not, let me know and I’ll help you get what you need! And if you’d like more step-by-step, no-bullshit VBA guides delivered direct to your inbox, join my email newsletter below.*

### Excel Merge Tables From Different Sheets Download

### Get the VBA Toolbelt!

### Excel Merge Tables From Different Sheets Into One

**Quit digging through old projects and forums like a chump!** Download the VBA Toolbelt and start with the most common Excel tasks already done for you.