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

对于购买产品的每个客户,我都需要弄清楚客户以前是否购买过该产品。 我有一个解决scheme,使用数组公式:

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

我喜欢它,因为它不需要对数据进行sorting(我想避免这个先决条件),但我并不完全满意,因为公式包含单元格范围(例如$D$3:$D$15 ),因此如果当新的事务添加到源数据时,我需要更新公式。

一个工作的例子是在这里 OneDrive。

在这里输入图像说明

任何人都可以找出一个更好的方式来做到这一点,可以消除数组公式中的范围?

尝试使用结构化的引用,而不是范围参考

{= MAX(IF((Table1 [[#All],[Product]] = [@Product])*(Table1 [[All],[Customer]] = [@ Customer])*(Table1 [[# ],[date]] <[@date]),表1 [[#全部],[date]],FALSE))}

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

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

上次购买日期

IFERROR函数返回一个零长度的string(例如"" ),当没有以前的购买date可以确定。 这就要求G3公式也要调整一下。

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

示例返回到: http : //1drv.ms/1gwJ8wH