Excel函数宏:创建一个下拉列表

时间:2018-10-31 16:21:51

标签: excel vba

我想创建一个函数,将单元格转换为包含值的下拉列表。

到目前为止,与我在网上阅读的内容相距甚远,它仅以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)

3 个答案:

答案 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步。您不能直接从验证列表设置中引用此函数,因此需要使用工作簿名称将验证调用“路由”到该函数:

enter image description here

第3步。创建您的单元内下拉列表,引用您刚创建的名称(依次链接到VBA功能)。现在,当左侧的单元格为“是”时,您将获得一个列表,否则没有列表。或者,您可以改用相同的方法来返回两个不同的列表,具体取决于其他单元格中的内容。

enter image description here

答案 2 :(得分:0)

好的,所以在研究了我提供的所有答案之后,我找到了此链接, https://www.excel-easy.com/vba/events.html

我能够编写一个Change事件Sub,以便当用户向单元格中添加一个值并切换出该单元格时,该子项将运行并创建下拉列表。