Excel,想要根据"是"创建下拉列表细胞

时间:2015-06-18 15:39:20

标签: excel drop-down-menu

问题很简单,但我似乎无法解决或找到答案。

我有一个单元格A2根据用户输入的其他内容以是/否激活。

我想在另一个单元格A3中创建一个下拉列表,只有当A2有一个"是"内。据我所知,这只能通过数据验证来完成,但它会不断抛出错误。

2 个答案:

答案 0 :(得分:3)

对于下拉列表的数据验证,当您创建它时,您可以使用"如果"声明。选择"列表"来自"允许",然后是来源,类似=if(A2="Yes",B2:B6,C2)。注意,我假设你的数据列表是B2:B6,而C2中是你想要返回的字符串,如果A2不是"是"。

注意:如果A2不是"是",并且您想要A3中的列表然后说"没有必要的列表",您不能只使用该字符串用于验证的IF语句 - 您需要将该字符串放入,即C2,并使用上面的公式。由于某种原因,不能在数据验证IF语句中输入字符串。

答案 1 :(得分:1)

编辑:哦,看起来VBA完全不需要这个用途。我没有删除答案,因为它可以工作,但我不会通过更容易的方法推荐这个!

我会使用VBA。如果您不害怕使用某些代码,那么我相信这将是有用的。如果你在VBA中绝对为零,我可以提供更详细的帮助。

打开Visual Basic编辑器并复制/粘贴它:

'this means it activates when there is change in your worksheet:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)         
    If Not Intersect(Target, Range("A2")) Is Nothing Then 'Checks that the change occurs in the cell A2       

        If Range("A2") = "Yes" Then 'only enters this if it changed to yes
            With Range("A3").Validation 'this little block creates the list. More on this after the code
                .delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=Paramètres!$C$1:$C$5"
            End With 
        End If

        If Range("A2") = "No" Then 'only does this if it changed to no
            Range("A3").Validation.delete 'this deletes the list.                    
        End If

    End if
End sub

因此,在单元格A2中发生更改时,会创建或删除列表(在我们的示例中)。该列表包含您必须在单元格C1到C5中写入的项目。 (例如:在c1中写“hello”,在c2中写:“再见”等)。如果您想要更多或更少的输入,您可以根据需要将C1更改为C3或C10。您也可以通过更改C将列表放在别处(例如E列)。在列中写入列表后,我建议隐藏该列,因为没有必要查看它。