不使用显式范围的数组公式

Array formulas that do not use explicit ranges

对于客户购买产品的每个实例,我都需要弄清楚该客户之前购买该产品的时间。我有一个使用数组公式的解决方案:

{=MAX(IF(($D:$D = [@Product])*($C:$C=[@Customer]) * ($E:$E<[@Date]),$E:$E,FALSE))}

我喜欢它,因为它不需要对数据进行排序(我想避免这个先决条件)但我对此并不完全满意,因为公式包括单元格范围(例如 $D:$D)因此,如果以及何时将新交易添加到源数据中,我将需要更新公式。

一个可行的例子是 OneDrive 上的 here

谁能想出更好的方法来消除数组公式中的那些范围?

将另一个条件添加到日期检索会更容易(并且非数组)切换到 AGGREGATE¹ function,其中任何不匹配的值都被强制为错误并忽略错误。

' in F3
=IFERROR(AGGREGATE(14, 6, ([Date])/(([Product]=[@Product])*([Customer]=[@Customer])*([Date]<[@Date])), 1), "")
' in G3
=IF([@PreviousPurchase]="", "", [@Date]-[@PreviousPurchase])

当无法确定之前的购买日期时,IFERROR function returns 一个零长度字符串(例如 "")。这就需要G3公式也要调整。

¹ AGGREGATE function 是在 Excel 2010 中引入的。它在早期版本中不可用。

样本返回:http://1drv.ms/1gwJ8wH

尝试使用结构化引用而不是范围引用

{=MAX(IF((Table1[[#All],[Product]] = [@Product])*(Table1[[#All],[Customer]]=[@Customer]) * ( Table1[[#All],[Date]]<[@Date]),Table1[[#All],[Date]],FALSE))}