子数组内的近似匹配
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)
明天
我有一个 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)
明天