2014-12-03 75 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