如何使用非常大的数据优化 COUNTIFS

How to optimize COUNTIFS with very large data

我想创建一个如下图所示的报告。
我的数据有大约 500,000 个单元格(它会继续变大)

现在,我正在使用 excel 中的 countifs 函数,但计算需要很长时间。 (无法关闭自动计算)

主要的值是作为日期收集的,日期的范围是3年左右,所以我不得不放很多公式来覆盖所有的值范围。


下图是数据源,上面那个是不能改的。 ,而底部是我自己创建的(可以更改)。我使用 weeknum 将日期更改为周数。


有没有更好的公式或任何方法可以使这个文件更快?欢迎各种建议!
我正在考虑使用 Pivot Table,但我不知道如何从这种数据源中创建 pivot table。
PS。 VBA是最后一个选项。

您可以在此处下载示例文件:https://www.mediafire.com/?t21s8ngn9mlme2d

我使用过 Excel 个类似尺寸的纸张。特别是如果您定期使用数据,我衷心建议切换到基于 SQL 的适当数据库、Access 或任何适合您目的的数据库。我确实对速度感到惊讶,而且你不会 运行 进入 Excel 的大小限制。 :-)

您可以很容易地导入您现在拥有的数据。 我对我的 postgresql 数据库很满意。

我将 post 这个答案与免责声明,它完全取决于数据集的大小。打开和关闭自动计算是最好的方法,但你的问题不允许我这样做,所以请继续阅读。

你的问题让我很好奇,所以我尝试了一下并计时。我基本上设置了从 1-1000 中选择的超过 100,000 个兰特数字的两列,然后尝试在两列相等的情况下对它们进行计数。我制作了一个可以 运行 关闭自动计算、插入开始时间、计算然后插入完成时间的宏。我用黄色突出显示了时差。

首先我试了你的方法,两个标准,countifs:

然后我尝试合并(连接)两列,看看是否可以通过仅使用一个 countif 条件和数据集来简化操作。它没有。查看下面的结果:

终于明白是怎么回事了。我决定让条件只匹配要查找的数字中的第一个值。我实际上是在减少每个单元格要检查的字符数。这产生了积极的结果。见下文:

因此,我的建议是尽可能限制您正在比较的单词的长度。您主要查看日期,因此您可能需要发挥创意,但这似乎是无需手动计算的最佳方式。