Drop down lists in Excel are super helpful when you want to limit a user’s input to a set of predetermined choices. Normally, drop down lists can be made by clicking on a cell, going to the data tab, then by using the Data Validation function. Change Allow to List.
But what if you’re importing data from another Excel file and want to automatically create a drop down list? It’s possible to do using VBA. To create a drop down list from a macro in cell A1, try this code in the VBA editor:
Sub ListCreator()
Range("A1").Validation.Add
Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Formula1:="OK,Maybe,No"
End Sub
Here, all the entries in the list will be created from the
macro. What if one of the entries needs to change? Only someone with VBA
experience will probably be able to figure out how to change it. So I like to
create the list somewhere within the spreadsheet where anyone can see it and
it’s obvious what it’s used for, then use the Name Manager to create a Named
Range to easily refer to the list. This way, if you decide to add entries later
the lists will automatically be updated as long as they used the Named Range.
In this example, I select my list within the Excel sheet
(column G), and give it the name “Status”.
To used a Named Range when you create a drop down list via
VBA, simply refer to the Named Range:
Range("A2").Validation.Add
Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Formula1:="=Status"
To set a default value, simply set the value of the cell
after changing the data validation:
Range("A2").Validation.Add
Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Formula1:="=Status"
Range("A2").Value = “OK”
It might be easier to understand by watching this short
video:
That’s all there is to it! Now you know how to add a drop
down list from a macro in Excel. How often do you use drop down lists? I’d love
to know, so let me know in the comments below.
Hi Nick,
ReplyDeleteI'm having trouble achieving an action from a pull down list. I basically want rows to delete for a certain three values and those rows to come back with selection of the other three values. I was able to get the program to work in the modules folder, but can't get this to work on a sheet level basis and I was wondering if you might be able to help out with this. Thanks, also really like the youtube videos. Here is the code I have in the modules:
Sub Table_row_change()
For c = 26 To 29
If Worksheets("Profile Selection").Cells(9, 9).Value = "ACS380" Then
Worksheets("Profile Selection").Rows(c).Hidden = True
End If
If Worksheets("Profile Selection").Cells(9, 9).Value = "ACS480" Then
Worksheets("Profile Selection").Rows(c).Hidden = True
End If
If Worksheets("Profile Selection").Cells(9, 9).Value = "ACS580" Then
Worksheets("Profile Selection").Rows(c).Hidden = True
End If
Next
End Sub
Sub Table_row_unchange()
For d = 26 To 29
If Worksheets("Profile Selection").Cells(9, 9).Value = "ACS880" Then
Worksheets("Profile Selection").Rows(d).Hidden = False
End If
If Worksheets("Profile Selection").Cells(9, 9).Value = "DCS880" Then
Worksheets("Profile Selection").Rows(d).Hidden = False
End If
If Worksheets("Profile Selection").Cells(9, 9).Value = "ACH580" Then
Worksheets("Profile Selection").Rows(d).Hidden = False
End If
If Worksheets("Profile Selection").Cells(9, 9).Value = "ACQ580" Then
Worksheets("Profile Selection").Rows(d).Hidden = False
End If
Next
End Sub
What do you mean it works from the modules folder but not at the sheet level?
DeleteRyan, do you mean it works if you hit "Play" button in Developer window, but not when you try to get it to run when using the sheet? If yes, could it be because your Sub is not PUBLIC?
DeleteThis comment has been removed by the author.
ReplyDelete