日期列表中的最新日期从同一列表中的给定日期过去 180 天

Latest date from a date list >180 days in past from a given date in same list

我有一个 "Appeared date" 列 A,旁边有一个“>180”日期列 B。还有 "CONCAT" 列 C 和一个 "ATTR" 列 D。

我想做的是找出距过去 180 或更久的最新日期,并将其写在“>180”列中,对于 "Appeared Date" 列中的每个日期,其中 Concat 列值相同.

>180 列中的日期应该是过去 "Appeared date" 列中的 180 天以上,但也应该是仅从 "Appeared date" 列中找到的最早日期.

基于此,我想检查某个特定产品是否更早 "ATTR" = 'NEW' >180,即它是否在 180 天或更早之前推出并最近再次出现?

我想我找到了答案。早些时候我使用了 MIN 函数,尽管不正确,因为数组公式中的日期(当您 select 并按下 F9 键时)按降序排列。所以我终于用MAX函数找到了过去180多的最早日期

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

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

尽管可能仍然需要 ADO 查询替代方案来处理大量数据。

要使用公式有效地执行此操作,您可以使用称为范围切片的方法来减少要处理的数组的大小,方法是有效地 t运行cating 它们,以便它们仅包含这 3,000 个数组的子集到可能包含正确答案的 50,000 行,然后进行实际的相等性检查。 (与您的 MAX/Array 方法相对,该方法对 all 行执行计算量大的数组操作,即使 most 行具有与您寻求答案的当前行没有关系)。

这是我的方法。首先,这是我的 table 布局:

...这是我的公式:

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 方法快两倍左右。随着数据量的增长,您的方法将以指数方式变慢,因为越来越多的处理能力被浪费在不可能包含答案的 c运行ching 行上。而我的会以线性方式变慢。我们说的可能是几分钟的差异,极端情况下甚至可能是一个小时左右。

请注意,虽然您可以使用一个大型公式来执行我的方法,但您最好不要这样做:它不会有任何效率。在任何情况下,将您的大型公式拆分为单独的单元格都是一个好主意,因为它可能有助于加快计算速度,这是由于所谓的多线程。以下是 Microsoft Excel 前项目经理迭戈·奥本海默 (Diego Oppenheimer) 在 2005 年就此主题不得不说的话:

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

Diego 继续概述了电子表格设计如何对任何性能提升产生直接影响:

包含大量完全独立计算的电子表格应该会带来巨大的好处。关心性能的人可以调整他们的电子表格以利用此功能。

底线:将公式拆分到单独的单元格中会增加并行计算公式的机会,Excel MVP 和计算专家查尔斯威廉姆斯在以下链接中进一步概述:

Decision Models: Excel Calculation Process

Excel 2010 Performance: Performance and Limit Improvements