2014-12-03 72 views
0

我有一个名为“myList”的命名范围,定义为Sheet1的第1到第200行。有20栏,第8栏是关于员工的信息,而最后12栏是0或1秒,以便每个月包括员工。使用命名范围进行条件数据验证

现在,我想创建一个下拉菜单,如果我的命名范围的第9-20列中至少有一个1,将显示雇员的姓名。

现在,我使用下面的公式作为数据验证:=INDEX(myList,,1),它向我显示myLast中的每个名称是否在列9-20中有1或1。

我怎么能改变这个,以便在创建下拉菜单的数据验证中显示的唯一名称是myList的第1列的名称,其中myList> = 1的第9-20列的对应SUM()?

回答

1

这里是一个workabout to your question
最后一栏后,创建一个列SUM,并计算各行的总和。让说列的数据表
然后使用以下数组公式来筛选,其和> = 1

可以说你把这个公式中X1和阻力,并填写名字V直到最后一行。

=IFERROR(INDEX($A$2:$V$31;SMALL(IF($V$2:$V$31>=1;ROW($V$2:$V$31));ROW(1:1))-1;1);"") 


这是一个数组式,所以按下CTRL + + 输入计算式



然后在Z1创建一个基于下拉列表在过滤名称栏X
更换因为你将有200行加标题的一行,如果是这种情况。我在示例表中使用了30个项目。
告诉我它是否有效。
***UPDATED***
很抱歉,公式中的一个错误,现在修正。这是更正的公式。现在它工作正常。我也改变了下载链接。

+0

我不得不下载你的例子来检查我的代码中有什么问题,但看起来你有同样的问题。为什么你的例子中的过滤名称中不是name1?为什么name30在这里,因为V中的和是0?然后我注意到name24和name25都没有,而是名称23和名称24。如果我从范围A1:A200和V1:V200开始,而不是A2:A200和V2:V200开始工作。 – dnLL 2014-12-04 13:28:49

+0

另外,列表最后会显示空白值。我试着用NA()来代替IFERROR()的第二个参数的空单元格,但#N/A也只出现在列表菜单中。 “忽略空白单元格”已被选中。因此,对于列表,我只是使用了'= INDIRECT(“myList!$ W $ 1:$ W $”&myList!$ X​​ $ 2)'其中'X2 = {MIN(IF($ W $ 1:$ W $ 200 =“” ,ROW($ W $ 1:$ W $ 200))) - 1}'。 – dnLL 2014-12-04 13:42:38

+0

@dnLL你是对的。我更新了公式和下载链接,现在它工作正常!告诉我是否出了问题。 – AHC 2014-12-04 14:39:49

0

可以组成一个DV列表而不直接参考了一组工作表的单元格:

Sub NotUsingCells() 
    Dim StringOfNames As String 
    StringOfNames = "Larry,Moe,Curley" 
    With Selection.Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:=StringOfNames 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
End Sub 

在你的情况,你会处理myList中行由行,建StringOfNames通过连接符合您的标准的名称。

+0

因为它绝对可以用Excel公式完成,所以我想尽量避免使用VBA。我尝试过使用VLOOKUP(),但它不被解释为数据验证范围的有效数组。也许我可以看看一个动态的命名范围,但我不知道如何以及在哪里设置我的条件。 – dnLL 2014-12-03 20:57:11