未分类列表的部分变为下拉列表

时间:2013-09-30 17:41:02

标签: excel validation excel-vba drop-down-menu excel-2010 vba

我正在尝试创建一个数据验证下拉单元格,该单元格显示从更大的列表中提取的值列表,但仅显示查找值满足特定要求的值。这就像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.

3 个答案:

答案 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分钟的解释。

SO19100440 example

答案 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