The article shows how to create an Excel drop down that allows users to select multiple items with or without duplicates.
Excel has come a long way since its inception and introduces more and more useful features with each new release. In Excel 365, they've added the ability to search within data validation lists, which is a huge time-saver when working with large sets of data. However, even with this new option, out-of-the-box Excel still only allows selecting one item from a predefined list of options. But fear not, as there is a solution. By using VBA, you can create drop-down lists with multiple selections. With the ability to prevent duplicates and remove incorrect items, this feature can streamline data input and improve accuracy in your Excel spreadsheets.
How to make Excel drop down with multiple selections
Creating a multi-select drop down list in Excel is a two-part process:
- First, you make a regular data validation list in one or more cells.
- And then, insert the VBA code at the back end of the target worksheet.
It also works in the reverse order :)
Create a normal drop-down list
To insert a drop down list in Excel, you use the Data Validation feature. The steps slightly vary depending on whether the source items are in a regular range, named range, or an Excel table.
From my experience, the best option is to create a data validation list from a table. As Excel tables are dynamic by nature, a related dropdown will expand or contract automatically as you add or remove items to/from the table.
For this example, we are going to use the table with the plain name Table1, which resides in A2:A25 in the screenshot below. To make a picklist from this table, the steps are:
- Select one or more cells for your dropdown (D3:D7 in our case).
- On the Data tab, in the Data Tools group, click Data Validation.
- In the Allow drop-down box, select List.
- In the Source box, enter the formula that indirectly refers to Table1's column named Items.
=INDIRECT("Table1[Items]")
- When done, click OK.
The result will be an expandable and automatically updatable drop-down list that only allows selecting one item.
Tip. If the method described above is not suitable for you for some reason, you can create a dropdown from a regular range or named range. The detailed instructions are here: How to create Excel data validation list.
Insert VBA code to allow multiple selections
This is the core part of the process that does the magic. To turn a regular single-selection picklist into a multi-select dropdown, you need to insert one of these codes in the back end of your target worksheet:
- VBA code for multi-select drop down with duplicates
- VBA code for multi-select drop down without duplicates
- VBA code for multi-selection dropdown with item removal
To add VBA code to your worksheet, follow these steps:
- Open the Visual Basic Editor by pressing Alt + F11 or clicking the Developer tab > Visual Basic. If you don't have this tab on your Excel ribbon, see how to add Developer tab.
- In the Project Explorer pane at the left, double-click on the name of the worksheet that contains your drop-down list. This will open the Code window for that sheet.
Or you can right-click the sheet's tab and choose View Code from the context menu. This will open the Code window for a given sheet straight away.
- In the Code window, paste the VBA code.
- Close the VB Editor and save your file as a Macro-Enabled Workbook (.xlsm).
That's it! When you go back to the worksheet, your drop-down list will allow you to select multiple items:
VBA code to select multiple items in dropdown list
Below is the code to make a data validation list that allows selecting multiple items, including repeated selections:
How this code works:
- The code enables multiple selections in all drop down lists on a particular sheet. You do not need to specify the target cell or range reference in the code.
- The code is worksheet specific, so be sure to add it to each sheet where you want to allow multiple selections in drop down lists.
- This code allows repetition, i.e. selecting the same item several times.
- The selected items are separated with a comma and a space. To change the delimiter, replace ", " with the character you want in DelimiterType = ", " (line 7 in the code above).
Note. The same character cannot be used as both the delimiter and part of the dropdown items. In our code, the default delimiter is a comma followed by a space (", "), so this combination of characters should not appear anywhere within the dropdown items themselves to avoid conflicts. If you change the delimiter to a single space (" "), bear in mind that the code will only function correctly for single-word items, failing to handle multi-word items containing spaces.
Excel multi-select dropdown without duplicates
When selecting from a large list, users can sometimes pick the same item more than once without noticing. The code below solves the problem of duplicates in a multi-selection data validation drop down list. It lets users pick a particular item only once. If you try to select the same item again, nothing will happen. Pretty cool, right?
Multi-selection dropdown with item removal
When users need to select multiple options but can make mistakes or change their minds during the selection process, a multi selection dropdown that allows for the removal of incorrect items can be a lifesaver.
Consider a scenario where you need to assign multiple tasks to team members using a drop-down list. With Excel's default functionality, the only way to remove an incorrectly assigned task is by clearing the entire contents of the cell and starting over. With the ability to remove individual items from the selection, the team can effortlessly modify task assignments without confusion or errors.
The code below implements the item removal functionality in a simple and intuitive way: the first click on an item adds it to the selection, and a second click on the same item removes it from the selection.
The below demo highlights how the multi selection dropdown with removal functionality works in Excel. The users can select multiple options from the data validation list and make adjustments on the fly. A streamlined and effective approach to managing selections!
How to make a multiple selection dropdown with custom delimiter
The character that separates items in the selection is set in the DelimiterType parameter. In all the codes, the default value of this parameter is ", " (a comma and a space) and it is located in line 7. To use a different separator, you can replace ", " with the desired character. For instance:
- To separate the selected items with a space, use DelimiterType = " ".
- To separate with a semicolon, use DelimiterType = "; " or DelimiterType = ";" (with or without a space, respectively).
- To separate with a vertical bar, use DelimiterType = " | ".
For example, if you change the delimiter to a vertical slash, your multi-select picklist will look as follows:
How to create dropdown with multiple selections in separate lines
To get each selection in a separate line in the same cell, set DelimiterType to Vbcrlf. In VBA, it is a constant for the carriage return and line feed characters.
More precisely, you change this code line:
DelimiterType = ","
to this one:
DelimiterType = vbCrLf
As a result, each item that you select from the dropdown list will appear in a new line:
How to create multi-select dropdown for specific columns, rows, cells and ranges
All the codes described in this tutorial work across an entire sheet. However, you can easily modify any of the codes, so it only applies to specific cells, rows, or columns as needed. For this, find this line of code:
If rngDropdown Is Nothing Then GoTo exitError
Add immediately after it, add a new line specifying where to allow multiple selections, as explained in the below examples.
Multi-select drop-down for specific columns
To allow selecting multiple items in a certain column, add this code:
If Not Destination.Column = 4 Then GoTo exitError
Where "4" is the number of the target column. In this case, the multi-select dropdown will be only enabled in column D. In all other columns, dropdown lists will be limited to a single selection.
To target several columns, specify their numbers using this code:
If Destination.Column <> 4 And Destination.Column <> 6 Then GoTo exitError
In this case, the multi-select dropdown will be available in columns D (4) and F (6).
Multi-selection dropdown for certain rows
To insert multiple drop-downs in a specific row, use this code:
If Not Destination.Row = 3 Then GoTo exitError
In this example, replace "3" with the row number where you want to enable multi-select dropdowns.
To target multiple rows, the code is as follows:
If Destination.Row <> 3 And Destination.Row <> 5 Then GoTo exitError
Where "3" and "5" are the rows where selecting multiple items is allowed.
Multiple selections in specific cells
To enable multiple selections in particular cells, add one of the below code lines.
For a single cell:
If Not Destination.Address = "$D$3" Then GoTo exitError
For multiple cells:
If Destination.Address <> "$D$3" And Destination.Address <> "$F$6" Then GoTo exitError
Just remember to replace "$D$3" and "$F$6" with the addresses of your target cells.
Multi-select drop-down for specific range
To limit your multi-select dropdown to a particular range, replace this line of code:
If Intersect(Destination, rngDropdown) Is Nothing Then
with this one:
If Intersect(ActiveCell, Range("C3:D10")) Is Nothing Or Intersect(Destination, rngDropdown) Is Nothing Then
The range of interest is specified directly in the code (C3:D10 in the above example). This modification offers a more efficient approach to handing ranges - instead of individually listing 16 cells, you use a single range reference.
How to enable multi-selection functionality in protected sheet
To enable a multi-select dropdown functionality in a protected worksheet, simply insert the following code into the sheet where you've added the primary code. This "protected sheet" code should be added after the main code.
Before adding this code to your worksheet, remember to replace "password" with the actual password you used to protect the sheet. And this is the only change that needs to be made. The code will automatically detect the presence of a dropdown list in a given cell and allow editing of that cell. In all other cells, editing will remain restricted.
Note. Please be aware that including your real password in the code could lead to a security risk. To ensure the safety of your workbook, store it in a secure location that is protected against unauthorized access or use.
So, there you have it - an Excel dropdown list with multiple selections. Adding this awesome feature to your spreadsheets will increase the accuracy of your data input and help you get your work done faster!
Practice workbook for download
Multi-selection dropdown - examples (.xlsm file)
622 comments
Hi,
Would be of a help if there is a VBA macro to auto map data validation list map basis the column header. Say for example for columns D to L with header name, I have the list of values defined with the same header name from column P to X. Data validation is to be set for column D basis column P, column E basis column Q and so on basis the matching column names. The header range where the data validation and the header range where the list values provided should be user selection as this may vary basis the requirement.
Hi! If I understand correctly, a special macro is required for your purposes. We offer a universal solution, where you can specify all the columns in which the macro should run.
Is there a way to have the "multiple selection drop down list with item removal" appear in the same workbook but different worksheet than the key from which you want to pull content? Also, how does the VBA code know where to pull the key content from. For example, I started on the "key worksheet" but cannot find how to tell the code to pull list items only from let's say "Column B" and then create a multi list in Column D in another worksheet (titled "Master").
I know if I add code: If Not Destination.Column = 4 Then GoTo exitError
it should put content in column 4 but presumably it will be the worksheet I am creating the code for (my "key" worksheet) instead of the "master" worksheet where I want to have the drop downs.
Next, and the biggest question, how do I run or enact the macro so it starts working? I have entered the code but see no changes in my drop down lists. They are single drop downs which I created prior to adding in this code.
Hi! Read the article carefully. It has all the explanations you need. You can create a drop-down list in any of the ways described, for example, in these articles: Create drop down list in Excel: static, dynamic, editable, searchable or How to make a dependent (cascading) drop-down list in Excel.
The VBA code in this article does not create any drop-down list. It does allow a drop-down list to add multiple values to a cell. To do so, it must be placed on the same sheet as the drop-down list. There are additional settings to make the macro work only on individual rows, columns, or cells. You can read about that in the article above.
The code you wrote allows the macro to work only in column D. It doesn't put anything anywhere else.
I hope I answered your question.
Great post.
I found 1 issue, when the worksheet is protected.
I applied your instructions for the following
To restore protection, at the end of the code, before this line:
exitError:
Add this code:
ActiveSheet.Protect Password:="password"
This will unlock the worksheet on any list box that is single select.
A list box defined as multi-select works as expected with this added following the protection additions
If Destination.Address "$D$15" And Destination.Address "$C$86" And Destination.Address "$C$87" Then GoTo exitError
I moved the ActiveSheet.Protect Password:="password" to right after Application.EnableEvents = True and now it no longer unlocks the worksheet for single list cells.
Place the code where specified in the article, and remember the security risk.
Hi Alexander - I needed to use the fix provided by Chris Strabley as well. Suggest reviewing your provided code to remedy the sheet unlock when single validation cells selected.
Great code by the way, helped me out significantly.
Hi! We won't change the macro code for these suggestions, as most users don't need to. Also pay attention to the following paragraph: Enable multi-selection functionality in protected sheet. You can change the code for yourself, remembering about the security risk.
Thank you for this. I am running into an issue that every time I add the code for a specific column If Not Destination.Column = 4 Then GoTo exitError on either the Multi item selection dropdown or or the multiselection dropdown with removal. The multiselection doesn't work any more... I am adding it after:
Option Explicit
Private Sub Worksheet_Change(ByVal Destination As Range)
Dim DelimiterType As String
Dim rngDropdown As Range
Dim oldValue As String
Dim newValue As String
DelimiterType = ", "
If Destination.Count > 1 Then Exit Sub
On Error Resume Next
Set rngDropdown = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitError
If rngDropdown Is Nothing Then GoTo exitError
Thoughts?
Thanks,
NVM. I figured it out.
Hello! With this code, multiple selection only works in column D. What exactly does not work for you? Describe it in more detail.
Thank you for making me look smart in my meetings!'
Sorting a worksheet column after adding this code does not work properly. Is there a way around this issue? List items do not appear in the column sort drop down list, When they do appear the list the requested sort list item does not return only the requested item. Thoughts?
I don't quite understand your problem. The multiple selection code only affects the operation of the drop-down list and nothing else. It creates a text string of multiple dropdown list items in a cell. I could not find a problem with the sorting. Describe your problem in more detail.
Hi,
Hope my message finds you well.
I maked an excel file with VBA which works perfectly but stop working on others computer when i share it by eamil.
How can i solve this issue please
Hello! I assume that when you send the file by email, the macros are automatically blocked. Try using these recommendations: How to enable and disable macros in Excel. I hope this will help.
Hi Alexander Trifuntov (Ablebits Team)
I want to know if there is a solution to use INDIRECT function on a multiple selected dropdonw list.
Hi! You can create a drop-down list any way you want. For example, using these guidelines: Create drop down list in Excel: static, dynamic, editable, searchable. The macro will work with this list.
You can change the VBA code and specify the column number in which the multiple selections will be made.
After code:
If rngDropdown Is Nothing Then GoTo exitError
add code:
If Not Destination.Column = 4 Then GoTo exitError
Thanks
But what if my column if more than one like column 15 and 16 and 19
Just below that example in the article there is an answer to your question.
If Destination.Column <> 15 And Destination.Column <> 16 And Destination.Column <> 19 Then GoTo exitError
Infinitely Thanks.
I realized you already solve it in "Multi-select dropdown for specific columns, rows, cells" section
Excellent code, thank you!
I need to have both multi-select drop down related VBA procedures you kindly allowed in your website work for one sheet because I have some columns here i want multi-select picks to allow duplicates and some columns to allow multi-select picks to NOT allow duplicates. Do i paste both procedures codes into the same code window? Do i need a call statement above the 2 procedures to call the one or the other depending on what column i am working in
thank you!
Craig
Hi! Unfortunately, only one of the three codes available in the article can be placed on a single sheet.
thanks very much for your prompt reply!
Is you have any advice on where I can go to get some columns to allow multi select and dupes and some to not allow multi select dupes to work on same sheet, I would love to hear it!
Craig
Hi! Pay attention to the following paragraph of the article above: Multi-select dropdown for specific columns, rows, cells. I hope it’ll be helpful.
It was very useful, thanks a lot.
Hello,
When I pasted the code to different sheets, there is bug at '' If Destination.Count > 1 Then Exit Sub''.
Could you please kindly explain to me what might be the reason behind?
Best and thanks!
Hi! This operator allows you to select only one value in the drop-down list. You are trying to add multiple values at once.
Hi, is it possible to achieve similar "multi select drop down list" functionality in Office Script in Excel for WEB?
or perhaps as an add-in for Excel for web?
I already answered this question in the comments. Unfortunately, Visual Basic only works in the desktop version of Microsoft Office.
I am trying to use this but the code is not running. I have the selections stored in a separate sheet in the same workbook, which, for other users, you have said should not change anything. I pasted the code in the worksheet-specific module and saved it, but the code does not work in the sheet. What might be the problem with this?
When I download the example sheet, the code that is already in that sheet does not work also.
Hi! Try to use this recommendations: How to enable and disable macros in Excel. I hope it’ll be helpful.
You are an absolute STAR, Alexander. THANK YOU
I have encountered a complie error while I was using . May I know what's wrong? :
Ambiguous name detected: Worksheet_SelectionChange
Hi! The ambiguous name error usually means that you have two subs within a module of the same name. Make sure you have copied the macro code correctly. You can also use the example file linked at the end of this article.
I have used the code on my sheet and it works beautifully. However, is it possible to create a pivot table showing the total count of the individuals choices from the list?
When I try to create a pivot table, it is not separating the individual choices.
Hi! The multiple-choice drop-down list creates a text string with separators between the individual choices. To select individual choices from the text, use this guide: How to split cells in Excel: Text to Columns, Flash Fill and formulas. You can also use the TEXTSPLIT function. I hope my advice will help you solve your task.
Hello,
I'm trying to apply that code on my side, but I'm able to select sinlge item from a drop-down menu only. Probably, this is caused by the fact that source drop-down items are stored in another sheet. How could I overcome this?
Hi! Install the code for the macro you want on the sheet where the drop-down list is located. Source drop-down items can be on another sheet. Follow the instructions in the article above. If that doesn't help, describe your steps in detail.
Thank you very much for prompt response. I'll describe detilas after weekend
Hi again, the problem is resolved now. The reason was: two separate 'Private Sub Worksheet_Change(ByVal Target As Range)' procedures for the same sheet. After combining them into a single procedure, everything works as expected.
Thank you!
Thank you so much for the code! I've tried multiple codes from different websites to select multiple options from a drop down menu but this is the first one that actually works for me! Cheers :)
Thank you for this article. I was able to leverage it to created a data validation with the ability to select multiple items. However, when I open it in 365, it will only let me select one item from the list. I have to open it in Desktop App to be able to select multiple items. Did I miss something or does it only work that way?
Thank you!
Hi! It has already been noted in the comment below that the browser-based version of Excel Office 365 does not support VBA. Therefore, macros only work in the desktop version.