对于购买产品的每个客户,我需要弄清楚该客户以前何时购买过该产品。我有一个使用数组公式的解决方案:
{=MAX(IF(($D$3:$D$15 = [@Product])*($C$3:$C$15=[@Customer]) * ($E$3:$E$15<[@Date]),$E$3:$E$15,FALSE))}
我喜欢它,因为它不要求对数据进行排序(我想避免这个先决条件)但我并不完全满意,因为公式包括单元格范围(例如$D$3:$D$15
)因此,如果新的交易被添加到源数据中,我将需要更新公式。
一个有效的例子是OneDrive上的here。
任何人都可以找到一种更好的方法,可以消除数组公式中的那些范围吗?
答案 0 :(得分:2)
尝试使用结构化引用而不是范围引用
{= MAX(IF((表1 [[全部],[产品]] = [@Product])*(表1 [[#All],[客户]] = [@客户])*(表1 [ [#ALL],[日期〕25; [@日期]),表1 [[#全部],[日期]],FALSE))}
答案 1 :(得分:1)
为日期检索添加另一个条件会更容易(并且非数组)切换到AGGREGATE¹ function,其中任何非匹配值被强制为错误并忽略错误。
' in F3
=IFERROR(AGGREGATE(14, 6, ([Date])/(([Product]=[@Product])*([Customer]=[@Customer])*([Date]<[@Date])), 1), "")
' in G3
=IF([@PreviousPurchase]="", "", [@Date]-[@PreviousPurchase])
当没有可以确定之前的购买日期时,IFERROR function会返回零长度字符串(例如""
)。这要求同样调整G3公式。
¹ Excel 2010引入了AGGREGATE function。早期版本不提供。
示例返回到:http://1drv.ms/1gwJ8wH