子数组内的近似匹配

Approximate match within a sub-array

我有一个 table 具有以下内容:

Name   Quota-Date   Quota
Ami     5/1/2010    75000
Ami     1/1/2012    100000
Ami     6/1/2014    150000
John    8/1/2014    0
John    4/1/2015    50000
Rick    5/1/2011    100000

(日期以美国格式显示:m/d/yyyy)。 "Quota Date" 是它旁边的活跃新 "Quota" 的第一个月。 例如。从 2010 年 5 月到 2011 年 12 月,Ami 的配额是 每月 75000。

我需要一个公式来获取给定人员和给定月份的配额:一个人每个月的活跃配额。这个需要的公式是计算这个table的第三列:

Name    Month       Quota
Ami     6/1/2010    75000
Ami     12/1/2011   75000
Ami     1/1/2012    100000
Ami     7/1/2014    150000
John    10/1/2014   0
John    4/1/2015    50000

我不想保持第一个 table 排序,但如果它能让事情变得简单得多,我会。

第二个 table 上 "Quota" 的正确公式是什么?

如果您的新数据在 A-C 列中,而原始数据也是 Sheet1 中的 A-C 列,则在 B2 中输入此公式:

=SUMIFS(Sheet1!C:C,Sheet1!A:A,A2,Sheet1!B:B,MAX(IF((Sheet1!A:A=A2)*(Sheet1!B:B<=B2),Sheet1!B:B,"")))

如果您的第 3 列中只有数字,则此公式效果很好,但如果它也适用于文本会更复杂。

谢谢,Máté Juhász! 我刚刚为此制定了另一种解决方案,而不是作为数组公式,但我更喜欢你的解决方案 - 更优雅,我会使用它!

我的记录解决方案:

=INDIRECT("Quota!$E$" & MATCH([@PM],PMQuotaTable[PM],0)+ROW(PMQuotaTable[#Headers]) & ":$E$" & MATCH([ @PM],PMQuotaTable[PM],0)+ROW(PMQuotaTable[#Headers])+COUNTIF(PMQuotaTable[PM],[@PM])-1),MATCH([@Month],INDIRECT("Quota!$D$" & MATCH([@PM],PMQuotaTable[PM],0)+ROW(PMQuotaTable[#Headers]) & ":$D$" & MATCH([@PM],PMQuotaTable[PM],0)+ROW( PMQuotaTable[#Headers])+COUNTIF(PMQuotaTable[PM],[@PM])-1),1))

我是 运行 匹配类型 = 1 的常规 index/match 以查找最大日期行,但我动态构建目标范围以仅限定当前人的行范围 (PM ). 我用这部分确定了这个 PM 的第一行: MATCH([@PM],PMQuotaTable[PM],0)+ROW(PMQuotaTable[#Headers])

...PM 的最后一行加上他在 table 中的行数,因此使用以下命令检索: MATCH([@PM],PMQuotaTable[PM],0)+ROW(PMQuotaTable[#Headers]) + COUNTIF(PMQuotaTable[PM],[@PM])-1

然后使用 INDIRECT 构建动态范围。因此,完整范围由这部分确定(最终检索所需的列): INDIRECT("Quota!$E$" & MATCH([@PM],PMQuotaTable[PM],0)+ROW(PMQuotaTable[#Headers]) & ":$E$" & MATCH([@PM],PMQuotaTable[PM] ,0)+ROW(PMQuotaTable[#Headers])+COUNTIF(PMQuotaTable[PM],[@PM])-1)

明天