How to Automatically Sort Excel Data After Pasting Using VBA
Question details
The user wants to automatically sort a specified data range in a spreadsheet immediately after pasting new data into it.
- Product
- Excel
- Device & OS
- not provided
- Scenario
- Pasting new data into an existing worksheet and needing it to sort automatically without manual intervention.
- Observed behavior
- Currently, pasted data remains in the pasted order until manually sorted. The goal is to automate the sorting process using a VBA macro upon data change.
Ensure that your workbook is saved as a Macro-Enabled Workbook (.xlsm) so that your VBA code is retained, and identify the specific column you want to use as your sorting key.
Create a Worksheet_Change VBA Macro for Automatic Sorting
Use a built-in event handler in VBA to trigger a sort command every time new data is pasted or entered into the worksheet.
The Worksheet_Change event is triggered automatically whenever a cell's value is modified, which includes pasting data. By attaching a sorting script to this event, your data will instantly organize itself.
It is crucial to temporarily disable application events within this script. Because sorting the data technically changes the worksheet, failing to disable events will cause the macro to trigger itself repeatedly in an infinite loop.
Press ALT + F11 on your keyboard to open the Visual Basic for Applications (VBA) editor.
In the Project Explorer pane on the left, double-click the specific worksheet where you want the auto-sort to happen (for example, Sheet1).
Select 'Worksheet' from the left dropdown menu at the top of the code window, and 'Change' from the right dropdown. This creates a Private Sub Worksheet_Change(ByVal Target As Range) block.
Inside the sub, first type 'Application.EnableEvents = False'. Next, add the code to sort your range (e.g., Range("A2:D10").Sort Key1:=Range("D2"), Order1:=xlAscending, Header:=xlYes). Finally, type 'Application.EnableEvents = True' before the End Sub line.
Close the VBA editor and paste new data into your target range in the worksheet to verify that the data sorts automatically based on your specified column.

Automate Your Worksheets with WPS Spreadsheet
WPS Spreadsheet provides excellent support for VBA and macros, allowing you to easily automate tasks like sorting data after pasting without complex configurations.
- 1. Open Your Document: Launch WPS Spreadsheet and open the workbook you want to automate.
- 2. Access the Developer Tools: Navigate to the 'Developer' tab on the top ribbon and click on 'VBA Editor' to open the scripting environment.
- 3. Insert the Sorting Macro: Double-click your target sheet in the project tree and paste your Worksheet_Change sorting code.
- 4. Save as Macro-Enabled: Go to 'Menu' > 'Save As' and choose the 'Excel Macro-Enabled Workbook (*.xlsm)' format to keep your automation active.

Frequently Asked Questions
Why is my Worksheet_Change macro causing the program to freeze?
This happens if the macro creates an infinite loop. When the macro sorts the data, it triggers another 'change' event. To fix this, wrap your sort code between Application.EnableEvents = False and Application.EnableEvents = True.
Can I sort multiple columns automatically using VBA?
Yes. In your VBA sort code, you can define multiple keys (e.g., Key1, Key2) to sort by a primary column first and then a secondary column.
Will this macro run if I paste data using a keyboard shortcut?
Yes, pasting data using shortcuts like Ctrl+V or the right-click menu modifies the cell values, which successfully triggers the Worksheet_Change event and executes your sorting macro.
How do I make the sort range dynamic instead of fixed?
You can make the range dynamic in VBA by finding the last used row. For example, declare a variable like 'Dim lastRow As Long', set it using 'lastRow = Cells(Rows.Count, 1).End(xlUp).Row', and then define your sort range as 'Range("A2:D" & lastRow)'.




