首页 > 解决方案 > 通过 VBA 在 Excel 中寻找有关数据过滤选项的建议

问题描述

我有一个项目,我想根据用户对 8 个不同标准的选择来过滤大量数据。就我而言,它是厨柜,但更普遍的例子是汽车。向用户呈现一个包含 8 个列表框的用户表单,其中一个用于制造、型号、包装、颜色、传输等。双击列表框项目会删除该列表框中的所有其他选项,并从所有其他列表框中过滤掉无效选项。选项组合在一起,因此用户可以选择“绿色”作为颜色,“福特”作为制造。

我已经以两种不同的方式完成了这件事,但我都不满意。

1)我创建了一个矩阵,其中我在左侧列出了模型,其他 7 个特征中的每一个在顶部都有“X”在交叉点。然后我教 VBA 如何基本上像人类一样使用大量嵌套循环来阅读它。这非常慢,每次选择都会导致程序在整理所有内容时暂停 1-2 分钟。

2)我列出了每一个可能的组合(大约 22,000 个)并使用 Excel 的内置过滤选项来过滤数据,然后将结果的每一列复制到第二张纸上,过滤掉重复项并重新排序,然后使用它来重新填充列表框。这非常有效,但由于某种原因我无法理解,当我过滤某些列时,Excel 会挂断 3-10 分钟。我对其进行了调试/跟踪,并且在我的所有代码运行之后但在将控制权返回给用户之前发生了挂断。

在这一点上,我愿意接受任何建议。最终我需要用户选择一个完整的(所有 8 个选项缩小为一个选项)配置。棘手的部分是用户可以从颜色“绿色”开始,这将消除“颜色”选择列表中的所有其他颜色,以及任何品牌、型号或包装等,它们各自不是绿色的列表。也许数据可以帮助解释它?

Make    Model    Package    Color    Transmission
Ford    Focus    LT         Blue     Manual
Ford    Focus    LT         Green    Manual
...
Ford    Focus    ST         Blue     Manual
...
Ford    Focus    LT         Blue     Automatic
...
And so on for 22,000 rows.

因此,如果用户选择“手动”,我需要删除“自动”行。如果用户然后选择“ST”,我需要删除“LT”行(同时假设自动行仍然被过滤掉,依此类推,直到只剩下一行。

标签: excelvba

解决方案


只是想到了一个想法:您是否熟悉在名为 Trie 的单词词典中搜索单词的高效方法?如果您正确编码每个选项,您可以在 Trie 中输入整个选项映射。当用户做出选择时,您将遵循 Trie 中的路径。如果不存在匹配的选项,则 Trie 返回 Null,您可以通知用户。对单词的实用 Trie 实现的很好解释: https ://www.geeksforgeeks.org/trie-insert-and-search/


推荐阅读