excel - 我在使 Excel 数据验证列表(下拉)像 excel 过滤器一样可搜索并从同一个值中选择/取消选择一个或多个值时遇到问题
问题描述
我在 excel 中有一个工作表,其中我在一列中创建了一个数据验证列表。该列表具有非常多的值,因此滚动列表是一项非常繁琐的任务。我想实现一个搜索框将在那里更快地检索下拉值的功能。如果在搜索结果后会有一些复选框选择全部或取消选择全部。我也对 vba 方法持开放态度,请帮助我。
提前致谢。
解决方案
从昨天开始,我一直在考虑(纯粹基于公式的解决方案)这个问题。
我找到了一个解决方案,首先允许您在列表上创建自定义过滤器,然后从过滤后的列表中选择数据验证下拉列表。
(如有必要,您可以隐藏这些过滤后的列表帮助器列,因为用户可能没有理由看到它们。)
请参见下文,我创建的示例数据集和一些示例过滤器。
原始列表位于 column 中A
,然后C
和E
列使用公式根据条件(黄色单元格)过滤其左侧的列表。
这是我在单元格中的数组公式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
,这将最终过滤原始列表中的数据,并且此过滤器将反映在您的下拉列表中。
请参阅以下有关此工作的一些示例。请注意,下拉列表会根据基于过滤器的列表结果而变化。
推荐阅读
- r - 找不到数据库“默认”
- unity3d - 自定义形状按钮 Unity UI
- java - Java NumberFormat 接缝被卡住/永久覆盖为英文格式
- python - posenet-python 导致 tensorflow 属性问题
- javascript - 登录页面重定向 - 如果未登录,则无法访问 HTML
- javascript - Reactjs 常见状态
- laravel - 如何在 Laravel 中获取特定字符串的记录?
- python - Pyspark:pyarrow.lib.ArrowInvalid:'utf-32-le'编解码器无法解码位置 0-3 中的字节:代码点不在范围内(0x110000)
- java - 未报告 Java 错误行号且不允许调试
- apache-kafka - 如何在 Quarkus 中的多个服务之间共享一个 kafka 连接器及其配置?