1. Add values to a regular drop-down list programmatically
In this tutorial, I am going to show you how to add values to a drop down list programmatically in cell C2.
1.1. How to insert a regular drop-down list
This is a regular drop-down list (not form control or active-x) easily created by press with left mouse button oning on the "Data Validation" button on tab "Data" and then on "Data Validation...".
A dialog box appears, select "List" and then press with left mouse button on "OK" button. You don't need to specify a source range, the macro takes care of that.
When a value is added, changed or deleted in column A, the drop-down list is instantly refreshed based on event code and a macro.
2. Add or remove a value in a drop down list programmatically
This article demonstrates how to add or remove a value in a regular drop down list based on a list located on a worksheet using VBA.
Cell B3 contains a regular drop down list which you will find on tab "Data" on the ribbon. The data source used in the drop down list is from column H. I am using an Excel defined Table that grows when new values are added.
Enter a value in cell E3 and press the "Add" button to add the value to the list in column H. You can also remove a value using the "Remove" button, note that this is case-sensitive.
The animated gif below demonstrates how to add or remove values from the list.
What you will learn in this article
How to insert a regular drop down list.
How to use an Excel Table as a data source for a drop down list.
How to convert a data set to an Excel defined Table.
How to add buttons to a worksheet.
How to change button text.
How to create a macro that adds a value to a list
Name a macro
Find last non-empty value in list
Copy entered value to first empty cell in list
How to create a macro that deletes a specific value in a list
Iterate through a given column in an Excel defined Table
Find a value in an Excel defined Table column
Delete a cell in a list
How to assign a macro to a button.
Where the macros are located.
2.1 How to build a drop down list
Select the cell you want to use.
Go to tab "Data" on the ribbon.
Press with mouse on the "Data Validation" button.
Select "List".
Excel won't let you type a reference to an Excel Table, however, there is a workaround. See below.
2.2 How to use an Excel defined Table as a data source for a drop down list
Use the following formula in order to be able to reference an Excel Table:
=INDIRECT("Table1[List]")
2.3 How to create an Excel defined Table
Select any cell in the data set you want to convert.
Go to tab "Insert" on the ribbon.
Press with left mouse button on "Table" button.
Press with left mouse button on checkbox "My Table has headers".
This article demonstrates how to automatically create drop-down lists if adjacent data grows, there are two methods explained here. The first method uses an Excel defined Table.
The benefit of using a drop-down list in an Excel defined Table is that the whole table column contains drop-down lists automatically, it will also expand automatically if more values are added to the Table meaning you don't need to copy and paste drop-down lists.
You only need to copy a drop-down list and paste once to a cell in the Table column and Excel will instantly fill the remaining column cells with the same drop-down list.
The second method is an event procedure that makes sure there are drop-down lists in column A if there are adjacent values in column B and C.
Table of Contents
Applying Drop Down lists dynamically using an Excel Defined table
Applying Drop Down lists dynamically (VBA)
Add Drop Down lists automatically
Create a table
Select cell range A1:C11
Go to tab "Insert"
Press with left mouse button on "Table" button
Select "My table has headers"
Press with left mouse button on OK!
Name Excel defined Table
Select any cell in the Table you just created.
Go to tab "Desing" on the ribbon.
Change the Table name to Table1.
Press Enter.
Repeat the steps above with cell range E1:E8, name the Excel defined Table: Table2
Apply data validations lists to the Table
Select cell A2
Go to tab "Data"
Press with left mouse button on "Data Validation" button
Allow:List
Source:INDIRECT("Table2[Region]")
Press with left mouse button on Ok!
The entire first column now contains a drop-down list in each cell. If the table expands, the new cell has a drop-down list!
The data validation lists contain values from a named range. The named range (E2:E8) expands when you add new values to the list.
The animated gif shows you that. The animated gif below also shows you when adding a new company name in cell B11, a drop-down list (Data validation list) is instantly applied to cell range A2:A11.
The VBA code in this sheet and a named formula make it all happen!
Let me explain how I created this sheet, instead of using an Excel defined Table I created a named range that expands. I have created comments to the VBA code I created, you can find it further down in this article.
Dynamic named range
Go to "Formulas" tab
Press with left mouse button on "Name Manager" button
[…] write this one? Any help would be appreciated. An example of what I am trying to do can be found on Add or remove a value in a drop down list | Get Digital Help - Microsoft Excel resource . The difference is that I am trying to use a UserForm instead of another cell. […]
I got error message "Can't execute code in break mode" when press with left mouse button on Add or remove button.
and view code in module1
below code will be highlighted in red
sorry, i am new to computer language and find your site is great for new-learning so I follow your tutorial. but vba is quite difficult to me. as for your formula is help me a lot. Many thanks Oscar.
.
I have updated this post, it now shows the correct characters.
I got error message "Can't execute code in break mode" when press with left mouse button on Add or remove button.
To be able to press a button (run a macro) after a vba error in the vb editor you need to press the reset button, the button is below the menu.
this solution "Add values to a regular drop-down list programmatically [VBA]" is not functioning in Excel 365, when the string variable is longer then 255 char's???
We have problem with drop list if you remove the first name of the list may be we can change to:
=OFFSET(Sheet1!$H$2:INDEX(Sheet1!$H$3:$H$990,COUNTA(Sheet1!$H$3:$H$990)-1),1,)
Jacky Harle,
=OFFSET(Sheet1!$H$3, 0, 0, COUNTA(Sheet1!$H$3:$H$1000))
[…] write this one? Any help would be appreciated. An example of what I am trying to do can be found on Add or remove a value in a drop down list | Get Digital Help - Microsoft Excel resource . The difference is that I am trying to use a UserForm instead of another cell. […]
I got error message "Can't execute code in break mode" when press with left mouse button on Add or remove button.
and view code in module1
below code will be highlighted in red
sorry, i am new to computer language and find your site is great for new-learning so I follow your tutorial. but vba is quite difficult to me. as for your formula is help me a lot. Many thanks Oscar.
i = Worksheets("Sheet1").Range("H" & Rows.Count).
End
(xlUp).Row + 1
Jeff Wan,
and view code in module1 below code will be highlighted in red
Wordpress sometimes convert & (ampersand character) to
&
.
I have updated this post, it now shows the correct characters.
I got error message "Can't execute code in break mode" when press with left mouse button on Add or remove button.
To be able to press a button (run a macro) after a vba error in the vb editor you need to press the reset button, the button is below the menu.
this solution "Add values to a regular drop-down list programmatically [VBA]" is not functioning in Excel 365, when the string variable is longer then 255 char's???
There is a limit to 255 characters but if a cell range is used then the limit is 32,767 items.
Sub
AddData()
Dim
Lrow
As
Single
Dim
AStr
As
String
Dim
Value
As
Variant
Lrow = Worksheets(
"Sheet1"
).Range(
"A"
& Rows.Count).
End
(xlUp).Row
With
Worksheets(
"Sheet1"
).Range(
"C2"
).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=
"=A1:A"
& Lrow
.IgnoreBlank =
True
.InCellDropdown =
True
.InputTitle =
""
.ErrorTitle =
""
.InputMessage =
""
.ErrorMessage =
""
.ShowInput =
True
.ShowError =
True
End
With
End
Sub