2015-06-18 71 views
0

这个问题很简单,但我似乎无法解决它或找到答案。Excel,想创建基于“是”单元格的下拉菜单

我有一个单元格A2,根据用户在别处输入的内容以yes/no来激活。

我想在另一个单元格A3中创建一个下拉列表,只有A2里面有“是”。从我所知道的情况来看,这只能通过数据验证来完成,但它会一直抛出错误。

回答

3

对于下拉列表中的数据验证,当您创建它时,可以使用“If”语句。从“允许”中选择“列表”,然后选择来源,如=if(A2="Yes",B2:B6,C2)。请注意,我假定您的数据列表是B2:B6,而在C2中,如果A2不是“是”,那么您希望返回一些字符串。

注意:如果A2不是“是”,并且您希望A3中的列表接着说“没有必要的列表”,那么您不能仅仅在IF语句中使用该字符串进行验证 - 您需要将该字符串,即C2,并使用上面的公式。出于某种原因,无法将字符串放入数据验证IF语句中。

+1

完美!如果数据验证失败,我试图让结果为“”,但引用具有“”的单元格代替工作! tyvm! –

+0

@JeyLegarie - 很高兴帮助!如果这是答案,你会介意标记它(点击向上/向下箭头下的复选标记)。 – BruceWayne

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中写入:“goodbye”等)。如果您想要更多或更少的输入,您可以根据需要将C1更改为C3或C10。您也可以通过更改C将其放置在其他地方(例如E列)。在将列表写入列中后,我建议隐藏该列,因为没有必要看到它。