子阵列中的近似匹配

时间:2015-06-04 10:54:20

标签: arrays excel array-formulas

我有一张包含以下内容的表格:

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)。 “配额日期”是其旁边活跃的新“配额”的第一个月。 例如。 2010年5月至2011年12月期间,Ami的每月的配额为75000

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

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

我不想保持第一个表的排序,但如果它会使事情变得更加简单,我会的。

第二张桌子上“配额”的正确公式是什么?

2 个答案:

答案 0 :(得分:1)

如果您的新数据位于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栏中只有数字,那么这个公式很有效,但是也可以使它更复杂地处理文本。

答案 1 :(得分:0)

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

我的记录解决方案:

= INDEX(INDIRECT(“Quota!$ E $”&amp; MATCH([@ PM],PMQuotaTable [PM],0)+ ROW(PMQuotaTable [#Headers])&amp;“:$ E $”&amp; MATCH([@ PM],PMQuotaTable [PM],0)+ ROW(PMQuotaTable [#Headers])+ COUNTIF(PMQuotaTable [PM],[@ PM]) - 1),MATCH([@月],INDIRECT(”配额!$ D $“&amp; MATCH([@ PM],PMQuotaTable [PM],0)+ ROW(PMQuotaTable [#Headers])&amp;”:$ D $“&amp; MATCH([@ PM],PMQuotaTable [ PM],0)+ ROW(PMQuotaTable [#Headers])+ COUNTIF(PMQuotaTable [PM],[@ PM]) - 1),1))

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

...并且通过添加他在表中的行数来确定PM的最后一行,因此使用以下方法检索: MATCH([@ PM],PMQuotaTable [PM],0)+ ROW(PMQuotaTable [#Headers])+ COUNTIF(PMQuotaTable [PM],[@ PM]) - 1

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

Mor