我有一个电子表格,我正在尝试创建一个动态下拉列表。我已经设置好了,因此我有一个Test No.
列表和一周中的一周它。它看起来像这样:
现在我想要的是当我在其中一个列表中添加相同的号码时,我希望下拉列表只给出我尚未用于该号码的可用天数。
即。对于1234
,New下的下拉应该是周四,周五,周六,周日
即对于5678
,New下的下拉应该是Mon,Wed,Thu,Sat,Sun
即对于9012
,New下的下拉应该有星期六,星期六,太阳
我有一个命名范围,一周有7天,我可以使用数据验证将该列表作为放置选项,但我希望它是动态的,只给我一些尚未使用的选项Test No
。
可以这样做吗?
答案 0 :(得分:1)
您可以在工作表的代码模块中处理Worksheet_SelectionChange
事件,以更改验证列表。需要进行一些检查以查看新选择的单元格是否是您要验证的单元格之一;即列B,A列中的标识符等。以下例程中的检查符合您的示例数据。
' Code Module of your worksheet
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.count > 1 Then Exit Sub
If Target.Column <> 2 Or Target.row < 2 Then Exit Sub
If Len(Trim(Target.Value)) > 0 Then Exit Sub
If Len(Trim(Target.offset(, -1).Value)) = 0 Then Exit Sub
Dim newList As String: newList = ",Sun,Mon,Tue,Wed,Thu,Fri,Sat"
Dim r As Range: Set r = Target.offset(-1)
Do Until Len(Trim(r.Value2)) = 0 Or r.offset(, -1).Value2 <> Target.offset(, -1).Value2
newList = Replace(newList, "," & r.Value2, "")
Set r = r.offset(-1)
Loop
With Target.Validation
.Delete
.Add xlValidateList, , , Mid(newList, 2)
End With
End Sub
答案 1 :(得分:1)
假设您的数据位于列A:B中,其中row1是标题行,并且您有一个名为天的命名范围,则右键单击工作表标签 - &gt;查看代码并将下面给出的代码粘贴到打开的代码窗口中 - &gt;将工作簿另存为启用宏的工作簿。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
Dim x, dict
Dim i As Long, lr As Long
Dim Rng As Range, Cell As Range
Dim Str As String
lr = Cells(Rows.Count, 1).End(xlUp).Row
Set Rng = Range("A2:A" & lr)
x = Range("Days").Value
Set dict = CreateObject("Scripting.Dictionary")
If Target.Column = 2 And Target.Row > 1 Then
If Target.Offset(0, -1) <> "" Then
For Each Cell In Rng
If Cell <> "" And Cell = Target.Offset(0, -1) Then
If Str = "" Then
Str = Cell.Offset(0, 1).Value
Else
Str = Str & ", " & Cell.Offset(0, 1).Value
End If
End If
Next Cell
For i = 1 To UBound(x, 1)
If InStr(Str, x(i, 1)) = 0 Then
dict.Item(x(i, 1)) = ""
End If
Next i
On Error Resume Next
With Target.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Join(dict.keys, ",")
End With
End If
End If
End Sub
答案 2 :(得分:0)
您可以使用依赖下拉列表
创建列表周一 - 周日定义名称 wkday ,例如
选择星期二 - 星期日和定义名称星期一
选择周三 - 周日和定义名称星期二
选择星期四 - 星期日和定义名称星期三
选择星期五 - 星期日和定义名称星期四
选择周六 - 周日和定义名称周五
选择星期日并定义名称星期六
您可以选择需要下拉列表的所有单元格:
从下面的Cell B2开始,在Source中创建数据验证,List:
=IF(OR(B1="",B1="Day"),wkday,INDIRECT(B1))