从同一列表中的某个给定date过去的date列表中的最近date> 180天

我有一个“出现date”列A,旁边有一个“> 180”date列B.还有“CONCAT”列C和“ATTR”列D.

我想要做的是从过去的180个或更多的date中找出最近的date,并将其写入“> 180”列,对于Concat列值相同的“出现date”列中的每个date。

> 180列中的date应该比过去的“出现date”列超过180天, 但也应该是仅在“出现date”列中find的最早date

在此基础上,我想检查一下特定的产品是否早于180天,也就是180天或更早的时候推出,最近又出现了吗?

  • 是否有一个Excel的公式,可以从出现的date选取最近的date(> 180),并显示在“> 180”列?
  • 它会涉及小(),频率(),匹配(),指数()等混合?
  • 或者需要一个VBA程序?

在这里输入图像说明

为了有效地使用公式,你可以使用称为Range Slicing的方法来减less要处理的数组的大小,方法是有效地截断它们,使它们只包含那些可能保存正确答案的那些3,000到50,000行的子集,然后做实际的平等检查。 (与您的MAX / Array方法相同,即使大多数行与您寻求答案的当前行没有任何关系,也会在所有行上执行计算量大的数组操作)。

这是我的方法。 首先,这是我的表格布局: 在这里输入图像说明

…这是我的公式:

180: =[@Appeared]-180 Start: =MATCH([@CONCAT],[CONCAT],0) End: =MATCH([@CONCAT],[CONCAT],1) LastRow: =MATCH(1,--(OFFSET([Appeared],[@Start],,[@End]-[@Start])>[@180]),0)+[@Start]-1 LastItem: =INDEX([Appeared],[@LastRow]) LastDate > 180: =IF([@Appeared]-[@LastItem]>180,[@LastItem],"") Days: =IFERROR([@Appeared]-[@[LastDate > 180]],"") 

即使使用这个小数据集,我的方法也是MAX方法的两倍。 随着数据规模的增长,你的方法将呈指数级慢,因为越来越多的处理能力被浪费在不可能包含答案的行上。 而我的将会以线性方式变慢。 我们可能谈论的是几分钟,甚至在极端情况下甚至一个小时左右。

请注意,虽然你可以用一个单一的大型公式来实现我的方法,但明智的做法是不要这样做:它不会有效。 在任何情况下将您的超级公式分成单独的单元格是一个好主意,因为它可能有助于加快计算速度,因为multithreading。 以前是微软Excel的前任项目经理迭戈·奥本海默(Diego Oppenheimer)在2005年就这个话题所说的话:

multithreading使Excel能够发现可以同时计算的公式,然后同时在多个处理器上运行这些公式。 最终结果是给定的电子表格可以在更短的时间内完成计算,从而提高Excel的整体计算性能。 Excel可以利用与计算机上一样多的处理器(或作为处理器出现的核心) – 当Excel加载工作簿时,它会询问操作系统有多less处理器可用,并为每个处理器创build一个线程处理器。 一般来说,处理器越多,性能改善越好。

Diego接着概述了电子表格devise如何直接影响性能的提升:

有很多完全独立的计算的电子表格应该看到巨大的好处。 关心性能的人可以调整他们的电子表格来利用这个能力。

底线:将公式拆分为单独的单元格可以增加并行计算公式的机会,正如Excel MVP和计算专家Charles Williams在以下链接中进一步概述的那样:

决策模型:Excel计算过程

Excel 2010性能:性能和限制改进

我想我find了答案。 之前我使用MIN函数,尽pipe不正确,因为数组公式中的date(当您select并按F9键)按降序排列。 所以我终于用MAX函数find了过去最早的180多个date。

 =IF(MAX(IF(--(A2-$A$2:$A$33>=180)*(--(C2=$C$2:$C$33))*(-- ($D$2:$D$33="NEW")),$A$2:$A$33))=0,"",MAX(IF(--(A2-$A$2:$A$33>=180)*(-- (C2=$C$2:$C$33))*(--($D$2:$D$33="NEW")),$A$2:$A$33))) 

检查修改后的Sample.xlsx ,这是不言自明的。 我在最终解决方法的公式中添加了Attr ='NEW'条件,以查找是否有任何180天或更早的新项目。

虽然仍然可能需要ADO查询替代处理大量的数据。