我想创建一个函数,将单元格转换为包含值的下拉列表。
到目前为止,与我在网上阅读的内容相距甚远,它仅以sub
格式显示了如何进行操作,但是我想尝试在单元格中使用它,以便它自动填充。到目前为止,我明白了。
function test(val as Range)
if val = 1 then
set test = Range(name_of_defined_list)
elseif val = 2 then
test = "no list"
end if
end function
然后在单元格中将其写入并拖动到下面的单元格
=test(C2)
答案 0 :(得分:0)
回答您的第一行问题:我想创建一个函数,该函数将单元格变成一个包含值的下拉列表。
如果您要使用此代码,则可以尝试以下代码:
Sub test()
'drop down list
Dim MyList(5) As String ' create array with definite size and value
MyList(0) = 1 ' assign value
MyList(1) = 2
MyList(2) = 3
MyList(3) = 4
MyList(4) = 5
MyList(5) = 6
'put in C2 array MyList
With Range("C2").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=Join(MyList, ",")
End With
End Sub
或者您可以使用大小为un的un数组,并从单元格中获取项目
Sub test()
'drop down list example with 5 items into list
Dim MyList() As String
Dim i, myDim As Integer
myDim = 5 ' number of items that you can get from a cell
ReDim MyList(myDim)
'get items from cells. example A1-B1-C1-D1-E1
For i = 0 To myDim
MyList(i) = Cells(1, i + 1) ' assign value into MyList
Next i
'cell A10 is mi drop down list
With Range("A10").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=Join(MyList, ",")
End With
End Sub
希望对您有帮助
答案 1 :(得分:0)
有一种方法可以解决此类要求,但它可能无法满足您的需求...
步骤1 。创建一个函数,当用户单击单元格内验证列表下拉菜单时调用该函数。此示例检查单元格左侧的值,并且只有在其值为“是”时,它才会返回要用于列表的范围。
Function Lister()
Dim rv As Range
If TypeName(Application.Caller) = "Range" Then
If Application.Caller.Offset(0, -1).Value = "Yes" Then
Set rv = Sheet1.Range("A1:A5")
End If
End If
Set Lister = rv
End Function
第2步。您不能直接从验证列表设置中引用此函数,因此需要使用工作簿名称将验证调用“路由”到该函数:
第3步。创建您的单元内下拉列表,引用您刚创建的名称(依次链接到VBA功能)。现在,当左侧的单元格为“是”时,您将获得一个列表,否则没有列表。或者,您可以改用相同的方法来返回两个不同的列表,具体取决于其他单元格中的内容。
答案 2 :(得分:0)
好的,所以在研究了我提供的所有答案之后,我找到了此链接, https://www.excel-easy.com/vba/events.html
我能够编写一个Change事件Sub,以便当用户向单元格中添加一个值并切换出该单元格时,该子项将运行并创建下拉列表。