How to Split Excel Data into Regional Worksheets Using VBA
Question details
The user needs to distribute thousands of rows of data into five specific regional worksheets based on ISO alpha-2 country codes, while ensuring headers are copied to each sheet.

- Product
- Excel / WPS Spreadsheet
- Device & OS
- not provided
- Scenario
- Organizing a large dataset by mapping multiple individual country codes (e.g., TW, TH) to a single grouped regional sheet (e.g., Asia).
- Observed behavior
- Currently, default macros split data by creating a separate sheet for every unique country, which creates too many tabs instead of grouping them by region.
Before writing your VBA script, create a dedicated 'Mapping' worksheet in your file containing two columns: Column A for ISO Country Codes (e.g., TW, AU, CA) and Column B for the corresponding Target Region (e.g., Asia, Oceania, Canada).
Use a VBA Dictionary and Mapping Table to Group Data
This solution reads a predefined country-to-region mapping table into a dictionary, allowing the macro to route each row to the correct regional sheet without creating redundant tabs.
By utilizing the Scripting.Dictionary object in VBA, the code can quickly look up the target destination sheet for any country code. This ensures that countries belonging to the same region are grouped into a single worksheet.
This method also includes a step to copy the source header to all dynamically updated destination sheets.
Create empty worksheets for each of your five regions (e.g., 'Asia', 'Oceania', 'Canada') in the current workbook.
Press Alt + F11 to launch the Visual Basic for Applications (VBA) editor, then click Insert > Module to create a new blank script window.
In your VBA script, declare a 'Scripting.Dictionary' object and write a loop that reads your 'Mapping' sheet, storing the country codes as keys and the regions as items.
Set up a loop to read through your main data sheet row by row, specifically checking the 'Shipping Country' column for each entry.
Use the dictionary to determine the destination sheet name. If the destination sheet's row count is zero, copy the header row first. Then, copy the current data row and paste it into the first empty row at the bottom of the destination sheet.
Close the VBA editor and press Alt + F8 to open the Macro dialog. Select your newly created macro and click 'Run'.

Manage Large Datasets and Macros Easily with WPS Spreadsheet
WPS Spreadsheet provides robust built-in macro support and excellent compatibility with Excel VBA. It handles large datasets smoothly, making it effortless to split, group, and analyze your data using automated scripts.
- 1. Download and Install: Get the latest version of WPS Office Free from the official website and install it on your computer.
- 2. Open Your Dataset: Launch WPS Spreadsheet and open your dataset containing the country codes and mapping table.
- 3. Access the Macro Editor: Navigate to the 'Tools' or 'Developer' tab on the top ribbon and click on 'Macros' to open the built-in VBA editor.
- 4. Run the Grouping Script: Paste your dictionary mapping script and execute it to instantly organize your data into regional tabs.

Frequently Asked Questions
Why does my current macro create a new sheet for every single country?
This happens if your macro uses the unique country code value directly as the new sheet name. To fix this, you must introduce a dictionary mapping table that tells the macro to use a grouped region name (like 'Asia') instead of the specific country code.
Will the VBA Dictionary method work on a Mac?
The 'Scripting.Dictionary' object relies on the Windows Script Host, which is not available on macOS. If you are using Excel for Mac, you will need to rewrite the lookup logic using a VBA 'Collection' instead.
How do I handle country codes that are missing from my mapping table?
It is best practice to include an error handler or a default condition in your VBA script. If a dictionary lookup fails (meaning the country code isn't mapped), route that row to an 'Uncategorized' or 'Other' worksheet to prevent the macro from crashing.
How can I ensure the headers are retained on every new regional sheet?
In your VBA loop, include an 'If' statement checking the next available row of the destination sheet. If the destination sheet is empty (row 1 is blank), command the macro to copy row 1 from your master sheet and paste it before transferring the data rows.




