我试图找到一种方法来创建一个仅包含在源表的不同列中满足条件的项目的下拉列表。
所以基本上,我有一个表格,其中列出了过去和现在的所有工作。有些已经完成,有些仍然开放。列A包含唯一的作业编号,列P让用户知道作业是打开还是关闭。如果作业已关闭,则该单元格包含“ Y”;如果作业仍处于打开状态,则该单元格为空。
我还有另一个表,该表具有一个下拉列表,允许用户选择他们正在处理的作业。为了使下拉列表的大小合理,我只希望它包含仍处于打开状态的作业的作业编号。如果P列为空,是否可以使用IF语句或类似的方法仅使用A列的作业编号填充下拉列表?
我发现了几个使用一个下拉列表更改另一个下拉列表中的项目的示例,但似乎它们都需要事先知道源数据并在命名范围内,而对我来说这将是关闭作业并添加其他作业时的动态列表。到目前为止,我一直找不到能够适用于我的情况的任何东西。
答案 0 :(得分:0)
我认为制作列表的最简单方法是使用宏来完成。
如果您遍历该列,然后将所有未关闭的作业放在一个数组中,
然后可以将数组作为列表。
Sub makeList()
Dim arr() As Variant, i As Integer, lnght As Long
lnght = Range("A" & Rows.Count).End(xlUp).Row
i = 0
For Each cell In Range("A1:A" & lnght)
If Not cell.Offset(0, 15).Value = "Y" Then
ReDim Preserve arr(0 To i) As Variant
arr(i) = cell.Value
i = i + 1
End If
Next
With Range("C1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:=Join(arr, ",")
End With
End Sub
这会将下拉列表放在“ C1”中,因此只需将其更改为应该的位置即可。
每次添加,删除或更改作业为关闭作业时,都需要对此进行更新。
您可以有一个更新按钮,或者只是将代码放在工作表中。
我建议使用Worksheet_Change
进行调用,如果您不希望它在每次更改时都运行,请添加一个相交方法以验证更改的目标是否与列表相关。
这也假定定界符为“,”,因此,如有必要,请进行相应更改。