首页 > 解决方案 > 我在使 Excel 数据验证列表(下拉)像 excel 过滤器一样可搜索并从同一个值中选择/取消选择一个或多个值时遇到问题

问题描述

我在 excel 中有一个工作表,其中我在一列中创建了一个数据验证列表。该列表具有非常多的值,因此滚动列表是一项非常繁琐的任务。我想实现一个搜索框将在那里更快地检索下拉值的功能。如果在搜索结果后会有一些复选框选择全部或取消选择全部。我也对 vba 方法持开放态度,请帮助我。

提前致谢。

标签: excelvbasearchexcel-formula

解决方案


从昨天开始,我一直在考虑(纯粹基于公式的解决方案)这个问题。

我找到了一个解决方案,首先允许您在列表上创建自定义过滤器,然后从过滤后的列表中选择数据验证下拉列表。

(如有必要,您可以隐藏这些过滤后的列表帮助器列,因为用户可能没有理由看到它们。)

请参见下文,我创建的示例数据集和一些示例过滤器。

在此处输入图像描述

原始列表位于 column 中A,然后CE列使用公式根据条件(黄色单元格)过滤其左侧的列表。

这是我在单元格中的数组公式C2

= IFERROR(INDEX($A$2:$A$8,SMALL(IF(LEFT($A$2:$A$8,LEN($B$2))=$B$2,
  ROW($A$2:$A$8)-ROW($A$2)+1),ROW($A2)-ROW($A$2)+1)),"(no match)")

这是我在单元格中的数组公式E2

= IFERROR(INDEX($C$2:$C$8,SMALL(IF(LEN($C$2:$C$8)=IF($D$2=0,LEN($C$2:$C$8),$D$2),
  ROW($C$2:$C$8)-ROW($C$2)+1),ROW($C2)-ROW($C$2)+1)),"(no match)")

我将这些单元格拖到第 8 行。

请注意,这些是数组公式,因此您必须在键盘上按Ctrl+ Shift+ Enter,而不是Enter在键入此公式后按。

现在该E列包含原始列表,但应用了这两个过滤器。当然,您可以根据需要添加任意数量的其他额外过滤器。一个缺点是这些公式相当长,需要根据需要创建,但是如果您比较上面的两个公式,这些公式通常遵循相同的结构。

设置数据验证下拉列表,我使用了这个公式:

= OFFSET($E$2,0,0,IFERROR(MATCH("(no match)",$E$2:$E$8,0),ROW($E$8)-ROW($E$2)+2)-1,1)

此公式通过返回 column 中的列表来工作E,但它只返回列表(不包括)第一个 where(no match)出现的实例。

见下文,我G2在示例电子表格的单元格中有这个。

在此处输入图像描述

旁注:OFFSET是易变的,通常应该避免,但不幸的是,OFFSET它是唯一允许您在数据验证中使用可变长度下拉列表的选项(我知道)。

使用此设置,您可以更改单元格B2和中的字段D2,这将最终过滤原始列表中的数据,并且此过滤器将反映在您的下拉列表中。

请参阅以下有关此工作的一些示例。请注意,下拉列表会根据基于过滤器的列表结果而变化。


未应用过滤器 在此处输入图像描述


两个过滤器都应用 在此处输入图像描述


仅应用第一个过滤器 在此处输入图像描述


仅应用了第二个过滤器 在此处输入图像描述


推荐阅读