2013-09-30 15 views
0

我試圖創建一個數據驗證下拉列表單元格,該單元格顯示從更大的列表中抽取的值列表,但僅查找值滿足特定要求的列表中的值。這就像SUMIF函數一樣,只添加查找值滿足特定要求的值。這裏是我的列表的一個例子:將未排序列表中的部分拖放到下拉列表中

   V F 
Apples    x 
Bananas    x 
Tangerines   x 
Tomatoes  x x 
Broccoli  x 
Pears    x 
Kiwis    x 
Plums    x 
Water melon   x 
Squash   x x 

我只想要在第一列中顯示「x」的下拉菜單中顯示的那些。

Tomatoes 
Broccoli 
Squash 

此外,原始列表不能排序。如果使用宏,我很好。我正在使用Excel 2010.

回答

1

如果你想不空格作爲數據驗證列表使用範圍內有效的條目,我建議是這樣的:

=INDEX($A$2:$A$11,SMALL(IF($B$2:$B$11<>"",ROW($A$2:$A$11)-ROW($A$2)+1),ROWS(C$2:C2))) 

按Ctrl + Shift鍵進入 + 輸入

https://www.youtube.com/watch?v=6PcF04bTSOM約有20分鐘的解釋。

SO19100440 example

+0

這幾乎可行,但你不能在數據驗證中使用Ctrl + Shift + Enter。 – Makai

+0

上面應該創建「數據驗證列表」 - 根據需要將公式向下複製,然後使用其佔用的範圍(其他某些單元格)。 – pnuts

0

如果不使用VBA,您可以創建過濾的列表副本。然後,您可以在使用數據驗證時引用該副本中的單元格。

例如,你可以做以下步驟爲你上面的例子:
應用濾鏡的地方只有那些顯示在第一列的X都出現在列表。複製過濾的列表,然後粘貼到工作表上的其他位置。關閉列表中的過濾器,使其恢復正常。轉到要添加驗證下拉列表的單元格,然後選擇數據驗證。選擇列表,然後引用複製的列表。

+0

你能舉個例子說明你的意思嗎? – Makai

+0

編輯答案上面 –

+0

這就是我以爲你的意思,但是這是更多的工作,然後我想。 – Makai

0

使用VBA,你可以使用這個作爲首發。關鍵是Range.Validation方法,詳細解釋here。這會在列A中讀取您的列表,找到列B中具有「x」的列表,並將其放入單元格E1中的驗證列表中。

Dim myvalidation_list As String 
Dim last_row As Long, current_row As Long 

last_row = Cells(Rows.Count, "A").End(xlUp).Row 

For current_row = 1 To last_row 
    If LCase(ActiveSheet.Cells(current_row, 2).Value) = "x" Then 
    'put in the delimiting "," if the list already has an entry 
    If myvalidation_list <> "" Then 
     myvalidation_list = myvalidation_list & "," 
    End If 
    'add to the validation list 
    myvalidation_list = myvalidation_list _ 
    & ActiveSheet.Cells(current_row, 1).Value 
    End If 
Next 

With ActiveSheet.Range("E1").Validation 
    .Delete 
    .Add Type:=xlValidateList, Formula1:=myvalidation_list 
End With