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
by Alexander Trifuntov, updated on
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 9. Total comments: 705
Hello,
Thanks so much for this code - it's great! One challenge I have though is that when you use the code to enable removal of previously selected items it doesn't quite work for me. Let's say I have 2 items that can be selected - QWE; RTY and am using the custom delimiter: " | "
If I select QWE, then RTY, they are now both added to the list like this : "QWE | RTY"
If I re-select RTY, it is now removed from the list like this: "QWE"
If I re-select QWE a second time, it is added to the list a second time, NOT removed, like this "QWE | QWE"
If I re-select QWE again a third time, they are both now removed and there is nothing left in the list.
The case where an item is added twice only happens when you try and remove the first item in the list. My best guess is that this because the first instance automatically doesn't have a de-limiter, so perhaps the code for removal is looking for a de-limiter, doesn't see it, then s then adds the item again with one? Then when you select a third time, it picks them both up due to the de-limiter?
I'm not sure, I'm not great with code but would appreciate if you're able to provide any other advice on this. this is the only VB I have in this document.
Thanks!
Hi! We have made changes in the code. Reinstall the code Multi-selection dropdown with item removal. Thank you for your comment!
Hi,
code was working greatly, but I have now new company notebook, suddenly code stopped working. I have downloaded your practice sheet, and it does not work as well.
No errors, dropdown list allows only one selection.
Excel version: Microsoft® Excel® for Microsoft 365 MSO (Version 2310 Build 16.0.16924.20054) 64-bit
Any suggestions ?
Hi! Maybe these articles will be helpful: How to enable and disable macros in Excel and Excel VBA macro tutorial: how to create, change, copy and delete macros.
Hi.
I understand the basics for macros to run.
OFF COURSE all macros are enabled, folders trusted.
Anyway it doesnt work. I was trying altering the code.
I deleted this section at the end and it worked for a while. Then again stopped working.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Looks to me like option explicit doesnt run properly.
Hi. On the old computer the code worked, on the new computer it does not work. Conclusion: your new computer software is the problem, not the macro code. Unfortunately, I am not able to solve this problem for you.
Hi Thank you for this code - it works but I wanted to take it a step further. I am using the code which places the selected items on a new line (so DelimiterType = vbCrLf), but I also want to add a comma to the previous line.
I have tried "DelimiterType = & ", " vbCrLf" - but this creates an issue because it allows an item to be selected twice, then after selecting that item a couple more times, only then do all instances get deleted.
Can you advise how to add a comma to the end of the previous line?
Thank you.
Gemma
Hi! Here's how to set the line separator correctly:
DelimiterType = "," & vbCrLf
Actually, I've just recopied the code and used "DelimiterType = "," & vbCrLf" and it seems to be working now.
Thank you
Gemma
Hi, thank you this code was very helpful. I am using the code which allows duplicates to be selected and I would like to count how many times each word is mentioned (including duplicates within cells). Do you know if there is a way to do this? I have tried the COUNTIF and SUMPRODUCT functions but cannot find a way to count the duplicates also - it counts a maximum of 1 per cell. Thanks.
Hi! See the answer in the previous comment.
Hi. Thanks for the comprehensive explanation. I have used the VBA successfully and created the multi selection list for all my worksheets - it works great! Once i have collected my data, is there any way to calculate/summarise how many of each selection within a drop down list have been selected. i.e. if i and counting fruit and have selected "apples" ten times (or 1000) and selected "pears" 37 times, how can i get excel to calculate that without me having to count each individual selection.
Hi! A drop-down list creates a text string in a cell. To count cells with specific text, try these instructions: How to count cells with certain text in Excel. I hope it’ll be helpful. If this is not what you wanted, please describe the problem in more detail.
Hi Alexander,
Thank you for the VBA. I am successfully using the code for the multi-select with removal and have added the part to do the selection on specific columns on one sheet. However, when I attempt to use the same code on other sheets in the same workbook (I have updated to point to the relevant columns in the new sheets) it does not work.
Is there something that I'm doing wrong or can this only be used on one sheet in a workbook? Any suggestions will be appreciated.
Hi! As the article above states, the code must be placed on each worksheet on which you want to make multiple selections from the drop-down list.
Hi Alexander I have your code working, but as soon as I close and reopen the file, the code won't work anymore, do you have any suggestions for me please? I check and nothing has changed, I have copied it to a new workbook and the exact same thing happens, it works until I close, then when I reopen, it will only let me select one item per cell. I did not add specified columns to the code, and my worksheet has about 10 list tables, so not sure if it's too much information? I am also very new to VB, so I could be doing something without realising I'm erring. Data tables are on a separate worksheet and the code is only on the worksheet I have the data validation on.
Hi! Note that your workbook must be saved in .xlsm format as a macro-enabled workbook. You can also find useful information in this article: How to use and store custom functions in Excel
Hi - thanks for this code - it works really well, except (as many have said) when I try to add the code for a protected sheet.
Could you perhaps show EXACTLY where this code is meant to go?
Should it be split and replace areas of the primary code? Tagged on at the end? It really isn't clear how to make this work.
Many thanks
Hi! Pay attention to the following paragraph of the article above: How to enable multi-selection functionality in protected sheet. No changes need to be made to the primary code.
Hi and thanks for the prompt reply. I still can't figure it out though and have tried it on both the sample sheet and my own, using office 365 Excel
I have appended the extra code following the primary code and I have set a password in the extra code. This is what happens:
I set the multi picker cells to be editable when the sheet is locked. At this point the sheet is unlocked.
I select an item in one of the multi picker cells. The sheet is then locked by the code.
This cell is then reverted to a single option pick list but is editable.
If I step on to another multi picker cell, the sheet unlocks.
As soon as I make a selection in this cell, the sheet is locked again.
None of the cells allow multi selection when the sheet is protected.
I know you have responded to this on several occasions but it really isn't clear where this extra code actually goes, to make this work or why it isn't dong for so many.
Many thanks
Hi! I think you understand that I can't check the code in your workbook. We have already discussed a similar problem in the comments above. I cannot reproduce your issue. Try deleting all the code and installing it again. I hope this will help.
Hi!
Thanks for sharing this. I tried the code, and it works for examples given above.
However, I would like to use the multiple selected items as input for a function (e.g. FILTER function).
Let's say I have a dataset for several years, and want to do a report with the filter function, filtering data for selected years, but giving the user the ability to select one or more years from a dropdown list.
Is there a way to do this?
Thank you in advance for your help. :)
Hi! The macro allows you to create a text string of multiple items in a single cell. But I cannot advise you how to use this text in the FILTER function. Each criterion of the FILTER function must be written separately.
After selection of multiple items, I want to add the input data. what should I do?
I am not sure I fully understand what you mean.
Hi - thanks for the code. When I use this I get the multi-select list working fine - however Excel is showing the standard 'data validation' error on the cell, as a concatenated version of selections isn't valid according to the original list defined in the data validation tab.
Is there any way to get Excel to not show up the issue?
Further, I cant use the formula bar to edit the result (i.e. manually delete an entry selected), because again, it's not valid based on the original formula list provided.
Any help would be appreciated!
Hi! Sorry, I do not fully understand the task. Please clarify your specific problem or provide additional information to understand what you need. I can only say that the macro does not affect the work of the dropdown list in any way.
Also, the password protection seems to be a bit funny! The code seems to turn protection on before I have, and then the list doesn't work anymore?
I fixed the first by protecting the sheet - and the second I used different code.
Sub Example()
ActiveSheet.Unprotect
Program logic...
ActiveSheet.Protect
End Sub
Around the sub I copied. Thanks :)
first of all thank you very much, The code is really good and works great ! 😊
I saw that people wrote that they have a problem when the sheet is protected. I also had a problem exactly like this, that the multipicklist worked fine, but as soon as I make the sheet protected, the multipicklist becomes a normal picklist. And even when I added your code for the protect it didn't help. I investigated your sample file which continues to work fine even when the sheet is protected, And I tried to understand what is the difference between us. I think that I came to a conclusion as to what is causing the problem:
When a different cell with a different validation is defined in the sheet, it prevents the multipicklist from working when the sheet is protected. I you will add to your sheet another validation in other cell, you will probably see the problem.
I really don't understand VBA, I would appreciate if you have an idea what can be changed in the code so that it works even when there are several different validations in the sheet.
Thank you very much !!
Hi! If I understood the problem correctly, you can only use one macro per worksheet. It is written about it in the article. All macro variants are in the article. You can add the code for the protected worksheet to any macro, as described above. I hope I have answered your question.
Thanks for the replay.
I m using only one macro on the sheet.
But I have two cells with different validations. Only one of them needs to be a multipicklist and uses your macro, the other validation is a number validation and doesn't have a list at all.
When I protect the sheet and add your code for protecting, the multipicklist becomes a regular picklist. It doesn't run the code correctly.
I tried to debug (As I said before, I don't know VBA, but I am programming in other languages). when I select a value from the list, I see that on the line "If rngDropdown Is Nothing Then GoTo exitError " it falls and goes to exitError without doing all the other important lines.
I would appreciate your help please. Thanks.
Hi! I downloaded the sample file at the end of the article and added the code for the protected sheet. I did not get any errors. Try reinstalling the macro code.
Your code works great, I didn't say it didn't.
But I meant that if you add another validation in another cell (like a validation on a number) and then you will see the problem.
In any case, my problem was solved in another way, the client asked to remove his field from the file 😀.
As I said, I added another validation in another cell (validation on a number) but I didn't see any problems. There is some problem in your file and maybe reinstalling the code would solve it.
The code works great on protected sheets if i use the codes on your sample sheet, but if I modify the code to make specific columns have the multi-selection option, the code not work and turn to single selection only.
Please you need to change the code on your sample sheet and add this line code for example (If Destination.Column 16 And Destination.Column 17 And Destination.Column 18 And Destination.Column 19 And Destination.Column 20 And Destination.Column 21 And Destination.Column 22 And Destination.Column 23 And Destination.Column 24 And Destination.Column 29 Then GoTo exitError) to see the problem.
Hi,
Amazing work. I have successfully implemented the code. However, when I transfer the file through e-mail, and then download it again, the multi-selection dropdown doesn't seem to work any more. Would you happen to know a solution to this problem?
I have resolved this issue, it was due to the excel being a read-only file. I saved it as another file and it worked.
Thanks again.
Hi,
Further to my previous question, how can I apply this code to only certain columns, as I have some columns that should only allow a single selection, where there are three columns ranges("A3:A5000, P3:P5000, AL3:AL5000") which should allow multi-select?
Please re-check the article above since it covers your task.
Hi,
Thanks for the great share.
I have multi-select dropdowns in a number of columns which works as per your post. However, if this is applied to column A the macro does not seem to work as it does for all other columns. I have tested the dropdown without the VBA and it works for single selections. All dropdowns are setup exactly the same, just pointing to different sources. Any idea what might be causing this?
Hi! The code works for the dropdown list in column A just as it works for the other columns. You may have set a limitation for some columns, as described in the article above.
Thank you for this code. It has been really helpful. If I want to be able to scroll through the drop down menu rather than using the arrow buttons to go through the list, how would I do that?
Hi! This code allows a standard Excel drop-down list to write multiple values into a cell. Everything you can do with the drop-down list is described in this article: How to edit, copy and delete drop down list in Excel.
Hi there! This is a fantastic feature but I’m having a hard time thinking through the best way to create a pivot table based on the individual components. For example, I don’t want to know the count of “Bread, Eggs, Butter” I want to know how many times Eggs are on the list and for what dish. I know I can do =countif(range, “*”&”Eggs”&”*”) for the count but I’m not able to do that in a pivot table to do additional analytics. I appreciate any guidance you’re able to provide! Thanks!
Hi! I don't really understand what your question has to do with the article above. If you want to count how many times a specific word occurs in a range of text cells, use the SUMPRODUCT function and these guidelines: How to find substring in Excel. For example,
=SUMPRODUCT(--ISNUMBER(SEARCH("eggs",B1:B10)))
In a pivot table, you can't get any analytics on a part of a text string. You need to split the text into individual cells.
This worked perfectly when I first tried it out, many thanks! However, when I got an update of MS Office, the code does not work for 64 bit - any way this could be converted easily?
Thanks!
Hi! The drop down list with multiple selections macro works in any desktop version of Excel that runs VBA. Try reinstalling the macro. You may find this article helpful: How to enable and disable macros in Excel.
I'll try, thanks!
Thank you this is perfect!!
Thank you for your help! I inserted the primary code into my spreadsheet and it worked as described. However, when I tried to add in the additional code to enable a multi-select dropdown functionality in a protected worksheet, I would get the following error: Compile error: Ambiguous name detected: Worksheet_SelectionChange
It would specifically highlight the first line of the added code which followed the primary code. I tried both protecting the sheet and workbook individually and together, and each time I would get the error. The last group in the primary code has the same "Private Sub Worksheet_SelectionChange (ByVal Target As Range)" language. I tried replacing that with the additional code, but that only resulted in the multi-select dropdown no longer functional. I have updated the password options as instructed.
I don't see this in the practice workbook, and I'm not sure how to fix. Any help you can provide would be much appreciated. Thanks!
Hi! Check your code carefully. Private Sub Worksheet_Change occurs there twice. Delete the unnecessary code.
Sorry, the primary code I used was for the "Multi-selection dropdown with item removal" option. So that only has one occurrence of "Private Sub Worksheet_Change". The ending version is "Private Sub Worksheet_SelectionChange". I combined this version of the primary code with the "multi-select dropdown functionality in a protected worksheet", leaving 2 occurrences of "Private Sub Worksheet_SelectionChange".
I am trying to create a shared document for work using the Multi-selection dropdown with item removal and it works great however it doesn't cross over to the online version (which all my colleagues would see).
It still lets me select from the list, the most basic form of it works, but the mutli selection and item removal doesn't seem to be translating over.
Any idea how I can fix this?
Hi! See answer in this comment.
Hi, thanks for the code. Selecting multiple options works smoothly, but if by mistake I select a wrong item in the list, how can I remove it? nothing seems todo the trick. thanks in advance
Hi! To remove the wrong item from a cell, you can use the code: Multi-selection dropdown with item removal. Or you can manually correct the data in the cell because the dropdown list creates a text string. You can edit it in the formula bar.
my bad, apologies, I used the wrong code snippet. all works perfectly
Hello,
This code works beautifully, until I upload my spreadsheet to onedrive so that I can share it with colleagues, it then loses the option to select multiple options from the drop down list and only allows you to choose one, Is there a way to change the VBA code for a share point excel spreadsheet, Or is there another way to add a multiple selection list for one that opens on chrome ? Any help would be appreciated
Hi! Remember that VBA only works in the desktop version of Excel. VBA macros and functions do not work in Excel Online.
Hello,
This is all great information!! So far is working perfectly! I do have a question, Is there any code that could eliminate your selection from the drop down box in the next row? For example, If I have multiple people using the excel spreadsheet and we have 2 rows with employee names in the drop down list, 1 person picks 3 names from the list and the next person in the next row needs to see what names they cannot pick.
Hi! You can try writing code that will dynamically change the data to create a dropdown list.
Thank you very much for providing this code, it works just how it's suppost to! I used the dropdown with multiple selections in separate lines code and realized, that the code does not keep the entries in the order of the drop-down menu. For instance: If you select Apricot and then Bread crumps, it will show it in the right sequence.If you de-select Apricot, it correctly only shows Bread crumps. However if you then select Apricot again, the result will be displayed at Bread crumps, Apricot. Is there a way to keep the selections in the order of the drop-down?
Hello! Since the drop-down list creates a text string in the cell, you need to write special VBA code to sort the words in the text string within the cell.
I am having a problem getting the code to work that allows the multi select in a protected workbook. Any suggestions? I’m not getting a specific error, the multi select functionality still doesn’t work when the additional code is added and it is updated with my password. Thanks!
Hi! Unfortunately, this information is not enough to understand your task. Carefully follow the recommendations from the article above. You can use the sample file. See the link at the end of the article. Or explain your problem in detail. What do you want to do and what code are you using.
The drop down list with multi- selection is great.
Is there any code that could eliminate your selection from the drop down box and repopulate it in the next cell over when it is clicked?
Hi! Such a code does not currently exist, and there are no plans to create one.
Hello,
Thanks so much for these codes. It works perfectly. Would it be possible to enhance the code to provide user with long description in the drop down list, but returns the short abbreviation in the worksheet? For example, when entering a state, user types in "A" and the drop down shows "Alaska, Alabama, Arizona, Arkansas". If user selects "Alaska", the worksheet would record "AL".
Best Regards.
Your request goes beyond the advice we provide on this blog. We don't do customization of the code.
Hi again,
please ignore. I figured out how to accomplish what I needed. In the line "newValue = Destination.Value", I simply replaced it with "newValue = Left(Destination.Value, InStr(1, Destination.Value, "-") - 1)". Of course, the state list would have to be entered as "AK-Alaska"; "AL-Alabama", ... Drop down list would show "AL-Alabama", but when user selects it, worksheet will show "AL".
Many many thanks for the codes.
Hi
Thanks for the code. It works perfectly and it saved a lot of our time.
Just wondering if it is possible to have different text colour for each phrase in one cell.
Let say in your example, whenever 'Milk' is selected, it shows with a red text colour and the rest item are shown black. Is this something possible?
BTW, I already tried the cell rule but it will change the text colour for entire cell not one item.
Many thanks
Hi! You can have a different text color for each phrase in one cell using a VBA macro. It is impossible to do this using regular Excel tools. Here is an example of such a custom function: How to highlight duplicate text strings or words in Excel cell.
First, thank you for sharing this code. I'm excited to see it in use with my current worksheet. However, I have a question first: where do we insert this code? You wrote, "insert the VBA code at the back end of the target worksheet" without details for what that means.
Hi! Read the entire article. Instructions are provided below in this paragraph: Insert VBA code to allow multiple selections.
Hi, thanks for our tutorial!
May I know if I can filter those "multiple selections" data that we just created?
Hi! The drop-down list with multiple selections creates a text string. To create a filter on a part of this text string, you can try using the advanced filter options as described in these instructions: Filter text data.
I have just downloaded your file and I dont have any error. Your example is working perfectly on every tab without error.
I just don't get why yours is perfect but then your code injected in ours won"t behave exactly the same way.
PS : This should be the last post, apologies for multiple posts for the same topic.
Hi,
Forgot to mention the nature of the error. It is a data validation error. It behaves as if the multiple options selected could not match when any of the options defined in the drop down list. In a way, it is true if the validation compares the value of the cell built with multiple entries with a cell defining the drop down list. In this case, there can't be a match hence we get an error flag.
Surprisingly, looking at your example, it seems you don't meet the same behaviour.
Best regards,
Hi,
Thank you for this valuable multiselection piece of VBA. Unfortunately, I have the same issue with an error flag on each cell now. The multi selection is working and even with your code enabled, there is no error flag if you select one option only. The error only comes when you select at least 2 options from the drop down list.
I can't appy BThompson's suggestion as I only have 1 table.
Any other suggestion please?
Best regards,
PS : I guess the filtering on this column with multiple options selected will not allow filtering by one of these options only, right? Any suggestion to allow "smart" filtering once multiple options are entered in a single cell?
Hi! You said earlier that the sample file you downloaded works without errors. So, the problem is in your file. Check what VBA codes are in your file. Maybe some other code is preventing the macro from working. You may have characters in your data that you also use as delimiters. We discussed this in the comments above. I can't check your file.
The drop-down list creates a text string. To create a filter on a part of a text string, you can try using the advanced filter options as described in this guide: Filter text data.
Hello, I used your script and it works. However, the macros won't run for excel online. Do you have any idea how to fix it?
Hi! I already answered in the comments above that Excel Online does not work with VBA. Therefore, macros and user-defined functions do not work there.
This is great! One issue, I am now getting a data validation error flag on every cell where I have selected multiple items from the list. The field type information is - Data type: List Restriction: Value must match one of the listed items. Blanks are ignored and are automatically valid.
I tried unchecking the 'show error alert after invalid data is entered' box in data validation but the error flags are still appearing.
I ran into the same error. Try spacing your tables apart at least one column. Otherwise, your individual tables will be treated as part of the larger, original table.
I have the same data validation issue. It seems isolated to when your data is in a table instead of just a collection of columns
Hi! Unfortunately, I don't see your data and the cause of your problem. Check if the dropdown list works without the code. Then carefully copy the code to your worksheet. Or use the example file linked at the end of the article.
How can I make a dropdown of a specific cell range associated with a cell containing a specific text where the text can vary based on a dropdown? For example, there is a data sheet that contains a column titled Product that has 3 products; another column titled Module that has 19 options each of which is associated with a specific product; a third column with 85 Agents who in turn are associated with specific modules. I'm trying to make a dropdown that if I select "x" module, it will only list the agents associated with that module. By the same token, a dropdown that would only list the modules associated with a specific product.
Hi! We have a special tutorial that can help to solve your problem: How to make a dependent (cascading) drop-down list in Excel.
Alex, this is amazing! Thank you! Quick question: is there a way to make a multi-selection available to only one column in a worksheet and have other data validation be single selection? Thanks.
Hi! Pay attention to the following paragraph of the article above: Multi-select dropdown for specific columns, rows, cells
How can I adapt the 'Multi-selection dropdown with item removal' code you provided to make it work for 2 columns in the worksheet (column 11 & column 12) ONLY. They both have separate drop-down lists, I want people to be able to multi-select more than 1 thing from the drop down list but give them chance to remove things selected by mistake without having to delete and start again. When I added If Destination.Column 4 And Destination.Column 6 Then GoTo exitError after section specified it didn't work and errored at bit of code with LEFT and RIGHT in ikt
Hi! If you need the code to work in columns 11 and 12, specify those column numbers in the code, not 4 and 6. All the necessary information is in the article above.
Really useful information here. I would like to know if there is a way to put this code in an addin and enable all workbooks to have access to the code instead of copying the code to the worksheet. I know the code is workbook worksheet specific but how can you remove this limitation?
Hi! Unfortunately, Worksheet_Change only works on a worksheet.
This code works great, thank you for the time spent creating this! My one question, i used the Multi-Select version of your code and its tailored to one column, column 3 but i would like to sort the results alphabetically in each cell that has multiple items selected, Im guessing i need a sort command between the last two "End If" is this correct? Can you provide an example?
Thanks again for the well crafted code.
Hi! A drop-down list creates a text string in a cell. To sort individual words in the text, you must write special VBA code. Or you can split the text into cells, then sort and merge the text strings again.
Or you can use the TEXTSPLIT function to split the text, and then combine the text strings using the TEXTJOIN function. For example:
=TEXTJOIN(", ",TRUE,SORT(TEXTSPLIT(A1,,", ")))
I am enabling this function for 2 cells in a protected worksheet. However, this function for multiple selection with removal is working only when it's unprotected. My code is pasted below, thank you so much!
'https://www.ablebits.com/office-addins-blog/create-multi-select-dropdown-excel/
Option Explicit
'Multi-selection dropdown with item removal
'https://www.ablebits.com/office-addins-blog/create-multi-select-dropdown-excel/
Private Sub Worksheet_Change(ByVal Destination As Range)
Dim rngDropdown As Range
Dim oldValue As String
Dim newValue As String
Dim DelimiterType As String
DelimiterType = vbCrLf
Dim DelimiterCount As Integer
Dim TargetType As Integer
Dim i As Integer
Dim arr() As String
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
'define only the cells need to enable multiple selection
If Destination.Address Range("Destination_Expiring_Coverage").Address And Destination.Address Range("Destination_Renewing_Coverage").Address Then GoTo exitError
TargetType = 0
TargetType = Destination.Validation.Type
If TargetType = 3 Then ' is validation type is "list"
Application.ScreenUpdating = False
Application.EnableEvents = False
newValue = Destination.Value
Application.Undo
oldValue = Destination.Value
Destination.Value = newValue
If oldValue "" Then
If newValue "" Then
If oldValue = newValue Or oldValue = newValue & Replace(DelimiterType, " ", "") Or oldValue = newValue & DelimiterType Then ' leave the value if there is only one in the list
oldValue = Replace(oldValue, DelimiterType, "")
oldValue = Replace(oldValue, Replace(DelimiterType, " ", ""), "")
Destination.Value = oldValue
ElseIf InStr(1, oldValue, DelimiterType & newValue) Or InStr(1, oldValue, " " & newValue & DelimiterType) Then
arr = Split(oldValue, DelimiterType)
If Not IsError(Application.Match(newValue, arr, 0)) = 0 Then
Destination.Value = oldValue & DelimiterType & newValue
Else:
Destination.Value = ""
For i = 0 To UBound(arr)
If arr(i) newValue Then
Destination.Value = Destination.Value & arr(i) & DelimiterType
End If
Next i
Destination.Value = Left(Destination.Value, Len(Destination.Value) - Len(DelimiterType))
End If
ElseIf InStr(1, oldValue, newValue & Replace(DelimiterType, " ", "")) Then
oldValue = Replace(oldValue, newValue, "")
Destination.Value = oldValue
Else
Destination.Value = oldValue & DelimiterType & newValue
End If
Destination.Value = Replace(Destination.Value, Replace(DelimiterType, " ", "") & Replace(DelimiterType, " ", ""), Replace(DelimiterType, " ", "")) ' remove extra commas and spaces
Destination.Value = Replace(Destination.Value, DelimiterType & Replace(DelimiterType, " ", ""), Replace(DelimiterType, " ", ""))
If Destination.Value "" Then
If Right(Destination.Value, 2) = DelimiterType Then ' remove delimiter at the end
Destination.Value = Left(Destination.Value, Len(Destination.Value) - 2)
End If
End If
If InStr(1, Destination.Value, DelimiterType) = 1 Then ' remove delimiter as first characters
Destination.Value = Replace(Destination.Value, DelimiterType, "", 1, 1)
End If
If InStr(1, Destination.Value, Replace(DelimiterType, " ", "")) = 1 Then
Destination.Value = Replace(Destination.Value, Replace(DelimiterType, " ", ""), "", 1, 1)
End If
DelimiterCount = 0
For i = 1 To Len(Destination.Value)
If InStr(i, Destination.Value, Replace(DelimiterType, " ", "")) Then
DelimiterCount = DelimiterCount + 1
End If
Next i
If DelimiterCount = 1 Then ' remove delimiter if last character
Destination.Value = Replace(Destination.Value, DelimiterType, "")
Destination.Value = Replace(Destination.Value, Replace(DelimiterType, " ", ""), "")
End If
End If
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
exitError:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.UnProtect Password:=strPwd
On Error GoTo exitError2
If Target.Validation.Type = 3 Then
Else
ActiveSheet.Protect Password:=strPwd
End If
Done:
Exit Sub
exitError2:
ActiveSheet.Protect Password:=strPwd
End Sub
If you don't have enough knowledge in VBA, just follow the instructions in the article above. There is no value assigned to the strPwd variable.
I have two sheets in my workbook. One is for tracking inventory and the other contains all the various select lists for different columns of data in the inventory sheet. For example, categories, subjects, status, etc. I can match-up the single select columns and lists across the two sheets but, I'd like the "subject" column to allow multiple entries as explained here. How to I tell it which sheet & column in the List sheet contains the data I want to use in a specific column in the Inventory sheet?
Hi! As described in the article above, you can specify a sheet, column, or individual cells in which the drop-down list can make multiple selections.
Clarification, How do I tell it which column in the List sheet contains the data I want to select from and add to a specific column in the Inventory sheet.
How do I combine the code for "VBA code to select multiple items in dropdown list" and "How to enable multi-selection functionality in protected sheet"
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
If Intersect(Destination, rngDropdown) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
newValue = Destination.Value
Application.Undo
oldValue = Destination.Value
Destination.Value = newValue
If oldValue = "" Then
'do nothing
Else
If newValue = "" Then
'do nothing
Else
Destination.Value = oldValue & DelimiterType & newValue
' add new value with delimiter
End If
End If
End If
exitError:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Unprotect password:="password"
On Error GoTo exitError2
If Target.Validation.Type = 3 Then
Else
ActiveSheet.Protect password:="password"
End If
Done:
Exit Sub
exitError2:
ActiveSheet.Protect password:="password"
End Sub
Hi! You have declared Worksheet_SelectionChange procedure twice. This is incorrect in VBA. Delete the code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
I used the code below after your suggestion to remove the piece you mentioned. It's still not working, it won't let me select the multiple values - I see it protecting the sheet after entering the code, but won't allow for multiple value selection. I'm wondering if my add in of the protection code is in the wrong place? would you be able to combine the 2 codes into one as it's supposed to run and I can copy and paste that into excel? I would be so greatful for the assistance.
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
If Intersect(Destination, rngDropdown) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
newValue = Destination.Value
Application.Undo
oldValue = Destination.Value
Destination.Value = newValue
If oldValue = "" Then
'do nothing
Else
If newValue = "" Then
'do nothing
Else
Destination.Value = oldValue & DelimiterType & newValue
' add new value with delimiter
End If
End If
End If
exitError:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Unprotect password:="password"
On Error GoTo exitError2
If Target.Validation.Type = 3 Then
Else
ActiveSheet.Protect password:="password"
End If
Done:
Exit Sub
exitError2:
ActiveSheet.Protect password:="password"
End Sub
Hi! I have your code working without problems on a protected worksheet. Check on which worksheet this code is installed. Also try the recommendations on how to enable macros from the previous comment.
Thank you for the tutorial. I have copied the code exactly, and the first time I used it it worked Perfectly, However, after saving it as a Macro enable excel sheet (as instructed) it no longer allows the multiple selection. I re-copied the code and it is still not working. Do you have any suggestions on how to correct this?
Hi! I am unable to verify your file. However, I hope this information will help to solve the problem: How to enable and disable macros in Excel.
I tried the code, but it does not work with me. I then downloaded your file, in fact multi selection does not work in your file as well. There is no error displayed, but it keeps showing one selection only. Do I have any issue on excel setting or else?
Can anyone help?
Hi! Your Excel has macros disabled. Here is the article that may be helpful to you: How to enable and disable macros in Excel.
Hi Alexander,
Wow, this is spectacular well written information. Thank you very much. I have a question about Multiple selections in specific cells. In you example you list just two cells, however what would be the process for several (5) cells.
I have another question, I have a drop-down menu In which I have 3 variables like resistanxe, Voltage, current, in second column B1
If one of the variables is selected I would like to have two variables pop upoutside this list under the $B$1 in $B$2, $B$3,
Those $B$2, $B$3have their own variables like for $B$2 coffin Manson, Arhenius, but they should disappear if $B$1 ( current is selected). Or a other variable in $B$1. So if I have $B$1 on resistance= I will get two strings variables in $B$2, $B$3, if values are written in $C$2; $C$3; they should write it to the second sheet for a calculation. And stay there. They will be permanently saved somehow. I didn’t find a good solution for this. Please help or refer to a good explanation
Hi! Your explanation is not quite clear. However, you can get the values in B2 and B3 depending on the value in B1 either by using the IF formula or by using VBA. These pieces of info are not enough to give you a formula.
This is incredibly helpful! Wow thank you for sharing.
I am trying to reference the various values selected in the drop down. Before, when it was just one value it was fairly straightforward. Now with multiple values I'm having trouble splitting them apart to be referenced. Any tips?
This tutorial was immensely helpful however, I am having an issue with 365 with the protected sheet code. Prior to protecting the sheet, the VBA code allows multi select in column 16 & 23 (without the additional protect code). Once the sheet is protected with these columns unlocked, I can only single select. I unprotected the sheet, added the additional VBA for protecting the sheet (edited the password), protected the sheet again, and have the same result- the sheet no longer allows multiselect once the protection is initiated.
I read a previous message from a user who had the same issue but did not see a resolution. This is the code in my sheet- is there something I should be adding or an additional step I am missing? Thank you.
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
If Destination.Column 16 And Destination.Column 23 Then GoTo exitError
If Intersect(Destination, rngDropdown) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
newValue = Destination.Value
Application.Undo
oldValue = Destination.Value
Destination.Value = newValue
If oldValue = "" Then
'do nothing
Else
If newValue = "" Then
'do nothing
Else
Destination.Value = oldValue & DelimiterType & newValue
' add new value with delimiter
End If
End If
End If
exitError:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Unprotect password:="password"
On Error GoTo exitError2
If Target.Validation.Type = 3 Then
Else
ActiveSheet.Protect password:="password"
End If
Done:
Exit Sub
exitError2:
ActiveSheet.Protect password:="password"
End Sub
Hello, everything works great for me until I attempt to add the code for a protected sheet. I am inputting my password, but I am getting an error for an ambiguous name. I believe it is related to how the code is formatted. Any help would be appreciated!