Apply Multi-Select Data Validation Drop-Downs to Excel Columns with VBA
Question details
The user needs to enable multiple selections from data validation drop-down lists across several specific columns in Excel using VBA.

- Product
- Excel
- Device & OS
- not provided
- Scenario
- Extending a single-cell VBA multi-select drop-down behavior to entire columns (such as columns C, F, and J), each potentially containing different validation lists.
- Observed behavior
- The existing Worksheet_Change code only applies to a single cell or small range. The user wants the VBA script to successfully detect changes and append multiple drop-down selections whenever a cell in any of the targeted columns is modified.
Ensure the Developer tab is enabled in your ribbon menu and that you have already configured the basic Data Validation lists for the target columns using the Data tab.
Update Worksheet_Change Event with Column Intersect Range
Modify your existing worksheet code by updating the Intersect range function to include entire columns like C, F, and J, allowing the script to trigger for any cell within those columns.
By utilizing the Application.Intersect method alongside Rows.Count, you can tell Excel to monitor entire column ranges dynamically without hardcoding specific row numbers. This ensures that no matter how deep your data goes, the multi-select feature will work seamlessly.
Press Alt + F11 to open the Visual Basic for Applications (VBA) editor. In the Project Explorer pane on the left, double-click the specific worksheet (e.g., Sheet1) where your data validation lists are located.
Ensure your code is nested inside the 'Private Sub Worksheet_Change(ByVal Target As Range)' event so it triggers automatically upon cell modification.
Update the Target Intersect test to specify columns C, F, and J by pasting this line: If Not Intersect(Range("C4:C" & Rows.Count & ",F4:F" & Rows.Count & ",J4:J" & Rows.Count), Target) Is Nothing Then
Within the IF statement, add the logic to temporarily disable events (Application.EnableEvents = False), capture the new value, undo to get the old value, combine them with a delimiter (like a comma), write the combined string back to the cell, and re-enable events.

Use WPS Spreadsheet to Manage Macros and Data Validation
WPS Office supports VBA macros natively, allowing you to run, edit, and troubleshoot Worksheet_Change scripts for multi-select data validation seamlessly.
- 1. Open Your Workbook in WPS: Launch WPS Office and open your .xlsm workbook containing the data validation lists.
- 2. Access the Developer Tab: Navigate to the Developer tab on the top ribbon menu to access macro and VBA tools.
- 3. Edit the VBA Script: Click 'Visual Basic' to open the WPS Macro Editor, then paste your column Intersect logic for the Worksheet_Change event.
- 4. Test Multi-Select Functionality: Return to the spreadsheet view and select multiple items from the drop-down lists in columns C, F, or J to verify the appending behavior.

Frequently Asked Questions
How do I separate the selected items in the VBA code?
You can separate items by adding a delimiter string within your VBA concatenation logic. Typically, this is done by setting the cell value like this: Target.Value = oldVal & ", " & newVal.
Can I apply different data validation lists to each column using this VBA method?
Yes. The VBA code simply intercepts the change event and appends values. It relies on the data validation rules already set in the spreadsheet. As long as columns C, F, and J have their own lists defined under Data > Data Validation, the VBA logic will work for each respectively.
Why does my macro crash when I delete a row or clear contents?
This happens if the VBA code tries to process a change across multiple cells simultaneously. You must add an initial check at the start of your Worksheet_Change event: 'If Target.Cells.Count > 1 Then Exit Sub'.




