我正在尝试创建一个数据验证下拉单元格,该单元格显示从更大的列表中提取的值列表,但仅显示查找值满足特定要求的值。这就像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.
答案 0 :(得分: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分钟的解释。
答案 1 :(得分:0)
不使用VBA,您可以创建已过滤的列表的副本。然后,您可以在使用数据验证时引用该副本中的单元格。
例如,您可以为上面的示例执行以下步骤:
将过滤器应用于列表,其中仅显示第一列中显示x的那些过滤器。复制已过滤的列表,然后粘贴到工作表上的另一个位置。关闭列表中的过滤器,使其恢复正常。转到要添加验证下拉列表的单元格,然后选择数据验证。选择列表,然后引用复制的列表。
答案 2 :(得分: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