Comments on: How to make Excel drop down list with multiple selections

By default, Excel data validation only allows users to select 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. Continue reading

Comments page 13. Total comments: 705

  1. Many thanks this helped me a lot

  2. Hi again Alex, I am so dopey, I re-read your comments

    "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"

    and deleted the " " and it fixed it.

  3. Hi Alex, I have booked marked your page and find your knowledge on excel the most useful and insighting. I have nominate 3 columns and am changing the DelimiterType form"', " to = "vbCrLf" however when i save it, close it then reopen it shows this in the column; Abusive Behaviour Towards StaffvbCrLfAlcohol on Premises.

    Please advise what i am doing wrong.

    1. Hi! See the corresponding paragraph in the article above. You can also see the sample code in the example file linked at the end of the article.

  4. Hi Alexander,

    This page is incredible! Thank you so much!

    I'm having some trouble though isolating the multiple dropdown selection to one column. In your instructions, you said about adding the code "If Not Destination.Column = 4 Then GoTo exitError". The only thing I changed was 4 to 5 as that's the column I need the dropdowns in.

    However, it is still affecting my whole worksheet, so if I go to a dropdown in column 6 (F) where I only want a single selection, it allows me to put in multiple selections.

    Please can you advise where I've gone wrong and offer a solution?

    1. Hi! Pay attention to which sheet code you added this string of code to. The code works only on the sheet in which it is inserted.

    2. Sorry, I should have looked at the previous comments! For those that are having similar problems, I resolved the issue by inserting the following below the "If Destination.Count > 1 Then Exit Sub" line:

      If Not Destination.Column = 5 Then Exit Sub

      The worksheet now allows me to make my multiple selections in column 5 (E), and single selections in column 6 (F).

  5. Hi Alexander
    thanks for your comprehensive useful post. I have a problem here, I did everything same as you've mentioned here, and it works as multiple selection with removal enabled, so I save my worksheet as macro enabled, but after I close and reopen the file, it won't work as multiple selection but only single selection

  6. Hi Alexander, Thanks for the post very useful. Can we restrict selection of entries to 3 max based on comma's. May be stop at selected 3 entries and error when adding the 4th one. Appreciate if you could help with the code to use in the above example.

    1. Hi! As much as I'd like to help, I'm overloaded with some current projects at the moment and won't be able to take time for your task. Custom code changes are quite time-consuming.

      1. no problem. Thank you!

  7. Thanks, sir. It's my first time trying macro. It is very useful for my project. All Thanks to your clear tutorial and code.

  8. Hey, is it possible to select a few items at one go from the dropdown list? For example, instead of selecting "Apples" , "Oranges", separately, is there a way to select multiple items at one go? So that Apples and Oranges will be displayed together at the same time without an extra step of selecting each item one by one. Perhaps like a checkbox before each item in the dropdown list.

  9. Hello. I used the VBA code in an Excel spreadsheet to allow multiple drop-down box selections in separate lines. Instead of DelimiterType = “,” I changed it to Delimiter = vbCrLf. I saved it as a xlsm file and it worked great. I got out of the spreadsheet and saved it. When I reopened to test it again, it would not work even though the same code was there. I have deleted the code and recopied it and also saved as a different xlsm file name. Do you have any ideas on what might have happened? I’m clueless and out of things to try. Any assistance would be appreciated.

    1. Hi! You can use the ready-made code from the example file (Selections in separate lines sheet) linked to at the end of this article.

  10. Is it possible to create a drop down list in a blank spreadsheet without creating a table?

  11. Hi,
    thanks for this, very useful.
    I am getting a bug on the removal function.
    With using a simple example where I have on my list Green Apples, Oranges, Apples; after selecting "Apples" again, the macro removes the first "Apples" - so it returns: Green , Oranges, Apples - which is not what I am expecting.
    is there a way to fix this?
    Thanks in advance,

    1. Hello! Thank you for your comment. We have changed the macro code. Now the values are deleted correctly.

  12. Hello First thank you - I was trying to read the comments on how to make this work for all sheets in a workbook rather then copying duplicate code onto each sheet (if I read the instructions correct)

    1. Hello!
      To run a macro on all worksheets in a workbook at once, the Workbook_SheetChange procedure is declared in the Workbook object and written in the ThisWorkbook code window. You can find the ThisWorkbook object in the VBAProject window below the worksheet list. Click on it and in the opened window add the code of the macro you need. You will need to add an additional parameter ByVal Sh As Object to the procedure.
      For example, instead of
      Sub Workbook_SheetChange(ByVal Destination As Range)
      write
      Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Destination As Range)

  13. I would like to use the "Multi-selection dropdown with item removal" but also allow for a write in on one option.
    For example: Location: Location A, Location B, Location C, Other Location:
    and the responder could click: "Location A" and "Other Location:", then go into the write in bar and type in "Garden" after "Other Location:"
    When I turn off the error alert in Data Validation I am able to do this but then the options start to duplicate themselves in the field: "Location A, Other Location:, Location A, Other Location: Garden"
    Thank you for your assistance

    1. Hi! The macro assumes that all values in the cell will be entered from the drop-down list. When you are correcting a cell manually, all of its content is considered as a new value and added to the existing text in the cell. The result is duplication.
      If you have "Location A, Other Location:" written in a cell and you want to add "Garden". When editing the cell, delete all text, type "Garden", and press Enter. You will get "Location A, Other Location:,Garden".

  14. How do I adjust this code to work, in a single column instead of in multiple data validation lists?

    1. Hi! I kindly ask you to take a closer look at the following paragraph of the article above: Multi-select dropdown for specific columns, rows, cells

  15. This code would prove to be very useful for me, but for some reason doesn't work for me? I downloaded the example workbook, but unfortunately all the drop downs just revert to normal - only allow single selection as per the list validation.

    I am guessing there is a setting in my excel that needs correcting or perhaps the version i am using isn't compatible?

    Any advice would be appreciated.

  16. Great solution Alexander. Very useful. Well done !

  17. 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.

    1. 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.

  18. 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.

    1. 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.

  19. 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.

      1. 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.

        1. 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.

  20. 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,

    1. Hello! With this code, multiple selection only works in column D. What exactly does not work for you? Describe it in more detail.

    2. NVM. I figured it out.

  21. Thank you for making me look smart in my meetings!'

  22. 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?

    1. 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.

  23. 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

  24. Hi Alexander Trifuntov (Ablebits Team)
    I want to know if there is a solution to use INDIRECT function on a multiple selected dropdonw list.

  25. 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

    1. 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

      1. Infinitely Thanks.
        I realized you already solve it in "Multi-select dropdown for specific columns, rows, cells" section

  26. 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

    1. Hi! Unfortunately, only one of the three codes available in the article can be placed on a single sheet.

      1. 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

        1. 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.

  27. It was very useful, thanks a lot.

  28. 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!

    1. Hi! This operator allows you to select only one value in the drop-down list. You are trying to add multiple values at once.

  29. 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?

    1. I already answered this question in the comments. Unfortunately, Visual Basic only works in the desktop version of Microsoft Office.

  30. 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?

    1. When I download the example sheet, the code that is already in that sheet does not work also.

  31. You are an absolute STAR, Alexander. THANK YOU

  32. I have encountered a complie error while I was using . May I know what's wrong? :

    Ambiguous name detected: Worksheet_SelectionChange

    1. 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.

  33. 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.

  34. 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?

    1. 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.

      1. Thank you very much for prompt response. I'll describe detilas after weekend

        1. 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!

  35. 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 :)

  36. 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!

    1. 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.

  37. HI

    great article and was very helpful. just wondering if it is possible to put a filter on that will find and select just a single item in the dropdown. for example (using your scenario) if i multiple dishes (lets say 30) and in them i had various ingredients added to the multiple drop down. but i only wanted to search for the dishes that had tomato in them. is there a way to just filter them? at the moment it is only letting me filter by what is in the dropdown of each row.

    hope that makes sense.

    regards

    1. Hi! The macro is used in the usual standard Excel drop-down list, in which no filters can be used. You can manage the content of the named range that is used in the drop-down list. If this is not what you wanted, please describe your question in more detail.

      1. HI
        How to write a code to print all the dropdown list values when we click any one value in that dropdown all the values must be printed in that dropdown list in excel

  38. Very useful; thanks. Do you have a version that works in an O365 browser-based instance of Excel?

    1. Hi! Unfortunately, the browser-based version of Excel Office 365 does not support VBA. Therefore, custom VBA functions and macros are not possible there.

  39. Hi. This code works great but for some reason I get two drowndown arrows. I'm only able to select on the list if I click first the cell. Otherwise, the second black arrow is static and when clicked, it shows an empty list. This cause another problem when all entries are deleted within the list. After deletion, it won't allow me to select the cell using mouse click. I have to select the cell below it first and use the curson up key on my keyboard to be able to select the cell again and activate the drop-down list. Any clue why this is happening?

    1. Hi! This code works with the usual standard Excel drop-down list. Unfortunately, I have not been able to reproduce your problem in my workbook. Try changing the height and width of the dropdown cell.

  40. This code works perfectly but has one problem when you have the list with similar values.
    ex. Semi-Automated, Automated
    It checks string if its contains not exact match in the list

    For that purpose need such condition:

    If Not IsError(Application.Match(newValue, Split(oldValue, ","), 0)) = 0 Then
    Target.Value = oldValue & ", " & newValue
    Else:
    Target.Value = oldValue
    End If

    1. Hi! Please explain what you see as the problem. Similar values are different values. And naturally, the list values should not have signs that are used as delimiters.

      1. Alexander , thank you for your comment!

        By similar values I mean the values that have same words.

        example: Red Apple, Apple

        So, this algorithm, in case uncheck item 'Apple' will find that old value: 'Red Apple, Apple' contains 'Apple',
        as a result I get 'Red'

        1. If you don't use a character that is a separator in the values, there are no problems. The default delimiter is a comma.
          If you need a comma in the values, use a different delimiter as recommended in the article above.

          1. In my case, problem is not in the delimiter but in the list that has complex words:
            Red Apple, White Apple, Apple

            Your code just replaces all words 'Apple', instead of using match comparison

            ElseIf InStr(1, oldValue, DelimiterType & newValue) Then
            oldValue = Replace(oldValue, newValue, "") ' removes an existing value from the list when you select it again
            Destination.Value = oldValue

            in my task I use:

            If Not IsError(Application.Match(newValue, oldArray, 0)) = 0 Then
            ..
            else
            For Each Item In oldArray
            If Item "" And Item newValue Then
            If UBound(newArray) >= 0 Then
            newArray(UBound(newArray)) = Item
            ReDim Preserve newArray(0 To UBound(newArray) + 1)
            End If
            End If
            Next Item

        2. Finally I came to this

          If Oldvalue = "" Then
          Target.Value = Newvalue
          Else
          Dim arr As Variant
          arr = Split(Oldvalue, ";")
          Dim str As String

          If Not IsError(Application.Match(Newvalue, arr, 0)) = 0 Then
          Target.Value = Oldvalue & ";" & Newvalue
          Else:
          Target.Value = Join(Filter(arr, Newvalue, False), ";")
          End If

  41. Hello, the above CODE 'Multi-selection dropdown with item removal', works excellent, however it turns on the rule for all my dropdowns in the excel. how do i limit this code only to cell D5?

    1. Good Morning -
      This works great! BUT,.....I would like to be able to select multiple items at one time from the drop-down list rather than returning to the dropdown selector each time. I need to remove the repetitive steps with each item selected. Is there a way to index the selected items so the user can begin typing the first few letters and the cursor move to the entry in the table?
      Thank you for this great tutorial!

    2. Hi! Pay attention to the following paragraph of the article above: Multi-select dropdown for specific columns, rows, cells.

      1. Hello,

        I have a similar problem. I want the code to work only in column F, however, when I change the number from 4 to 6 it work in column E. Any reason for this?

        Thanks,

        1. Hi! Unfortunately, I could not reproduce your problem in my workbook. Check if you put the code in the right line:
          If Not Destination.Column = 6 Then GoTo exitError
          Which columns does it work in?

      2. This is like Magic! Works perfectly, thank you so much!!!!!

  42. Very clear, thanks! One question though, is it possible to order the answers automatically?

    For instance, if you have a dropdown with values: 1, 2 and 3. Now when you first select 2 and then select 1, the order is 2, 1. I would like to have it automatically change to order 1, 2, based on the order of the initial list of values. Regardless of the selection order.

    1. Hi! Sorting words in a cell is a separate task that must be handled independently from the multiple selection macro.

  43. Hi! I'm trying to use the 'Item Removal' code, but my drop down is on a separate sheet than my list... Can you help me with modifying the code for this?

    1. Hi Liz,

      The current code completely covers your case! Simply, create your dropdown as described in how to make dropdown from another worksheet. And then, add the code to the sheet where your dropdown is located. In the sample worksheet that is available for download at the end of the post, the source items and the 'dropdown with removal' are on different sheets, and all works beautifully.

    2. Hi! I think there's no problem placing the code on the same worksheet as the drop-down list. Follow the instructions in the article above.

      1. Hi! Yes, the code works properly that way (as it does in your workbook file).

        What I'm trying to do is put my dropdown choices on Worksheet A, referencing the list and VBA code associated with worksheet B. The reason I'm doing this is because I need multiple different drop downs on 'Worksheet A'. Wondering if I can make that work...

        1. Hi! Unfortunately, this VBA code does not have the ability to use several types of drop-down list with multiple choices on one sheet.

  44. Is there a way to use COUNTIF, for example, to calculate how many dishes contain cheese? When I've tried, COUNTIF doesn't calculate for cells that contain more than 1 selection.

  45. Good and complete explanation
    It saved me.
    Thanks

  46. I love that I can make multiple selections from a drop down.
    The problem I am having is that when I save the workbook, using .xlsm, close the workbook, then go back to it, the multiple selection option is no longer working.
    What am I doing wrong?
    Thanks,

  47. Why doesn't the multi-select drop-down work when the sheet is protected, but works when the sheet is unprotected? I have made sure those cells are not locked in the sheet so the row formats can be expanded if more than one item is selected. How do I fix this problem?

    1. Hi!
      If a worksheet is protected, by default, all cells are locked, even those that were previously unlocked. This means that any VBA code that tries to reference or access unlocked cells will not work when the worksheet is protected.

      In order to access unlocked cells that have validation rules applied, you will need to unprotect the worksheet first, execute the code that references the unlocked cells, and then protect the worksheet again.

  48. How do you make it so that it targets a specific column?

    1. 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

      In this case, 4 means column D. In the other columns, the dropdown list will work as usual.
      Thanks to K N for clarification!

  49. Brilliant article. Well written, customer-oriented. You made it very easy for us :)

  50. When I share the sheet with Co-workers, they are not able to select multiple items. It reverts back to a single selection. But when I am in the document I can select multiple.

Post a comment



Thank you for your comment!
When posting a question, please be very clear and concise. This will help us provide a quick and relevant solution to
your query. We cannot guarantee that we will answer every question, but we'll do our best :)