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。

4

3 回答 3

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+输入Enter

https://www.youtube.com/watch?v=6PcF04bTSOM有大约 20 分钟的解释。

SO19100440 示例

于 2013-09-30T18:05:40.293 回答
0

使用 VBA,您可以将其用作启动器。关键是Range.Validation方法,这里详细解释。这会读取 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
于 2013-09-30T19:09:51.033 回答
0

在不使用 VBA 的情况下,您可以创建已过滤列表的副本。然后,您可以在使用数据验证时引用该副本中的单元格。

例如,您可以对上面的示例执行以下步骤:
将过滤器应用于列表,其中仅显示第一列中显示 x 的列表。复制过滤后的列表,然后粘贴到工作表上的另一个位置。关闭列表中的过滤器,使其恢复正常。转到要添加验证下拉列表的单元格,然后选择数据验证。选择列表,然后引用复制的列表。

于 2013-09-30T17:55:29.573 回答