我在电子表格中有两列,都是从下拉列表中选取的。
Col A是"您想要更多信息" - 可能的值是\否
Col B是"你是怎么听说我们的?#34; - 可能的值是Email \ Phone \ Other问题:如果"否"在Col A中选择,然后Col B的值应为N / A,否则用户应该能够从下拉列表中选择并选择一个值。使用下面的公式,我可以显示N / A,但是" false"选项会覆盖任何可用的下拉值或先前选择的值。所以简单地说,如果选择是,则让用户在另一个单元格中选择一个值。如果选择否,则在另一个单元格中显示N / A.关于如何让这个工作的想法?
我当前的公式不起作用(位于单元格A2中):
=IF(A1="No","N/A","Select Value")
答案 0 :(得分:1)
试试这个:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
If Target.Column = 1 Then
Set Cell = Target.Offset(0, 1)
If Len(Target.Value) = 0 Then
Cell.Validation.Delete
Cell.Value = vbNullString
Else
If Target.Value = "Yes" Then
With Cell.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=ContactMethod"
End With
ElseIf Target.Value = "No" Then
Cell.Validation.Delete
Cell.Value = "N/A"
Else
MsgBox "Input only Yes or No."
Target.ClearContents
Cell.Validation.Delete
End If
End If
End If
End Sub
<强>截图:强>
如果在A栏中输入Yes
(请注意下拉箭头):
如果在A栏中输入No
(请注意现在缺少的下拉箭头):
如果在A栏中输入任何其他内容:
此外,如果删除列A的值或将其更改为No
,它会安全地删除验证。这样,除非列A具体为Yes
,否则无法访问下拉列表。
确保将其粘贴到工作表的模块中(下面屏幕截图中的Sheet9):
如果有帮助,请告诉我们。
答案 1 :(得分:0)
只是为了它的乐趣,因为它不是一个完整的解决方案,需要一个litle vba ...... A1中的Firs ComboBox(是/否),D1:D3(电子邮件/电话/其他),E1(NA)。写为B1列表数据验证的来源:
=CHOOSE(IF(A1="Yes";1;2);D1:D3;E1)
您需要VBA,至少在A1中的值更改时删除B1中的值,如果A1 =否则需要将其更改为“NA”
答案 2 :(得分:0)
这是我的任务的解决方案。 该代码使我们可以根据上一个单元格中经过数据验证的输入来更改一个单元格中的数据验证。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("L21")) Is Nothing Then
Worksheets(3).Range("L23").Clear
Select Case Range("L21")
Case "x": x_projection
Case "y": y_projection
Case "z": z_projection
End Select
End If
End Sub
Sub x_projection()
Worksheets(3).Range("L23").Validation.Delete
Worksheets(3).Range("L23").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="y, z"
Worksheets(3).Range("L23") = "z"
End Sub
Sub y_projection()
Worksheets(3).Range("L23").Validation.Delete
Worksheets(3).Range("L23").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="x, z"
Worksheets(3).Range("L23") = "x"
End Sub
Sub z_projection()
Worksheets(3).Range("L23").Validation.Delete
Worksheets(3).Range("L23").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="x, y"
Worksheets(3).Range("L23") = "y"
End Sub