我在工作中遇到此问题,使用正确的案例编号填充工作表。
Sheet 1: (Report)
SSN | Service Date
123456 | 10/01/2014
Sheet 2: (Data)
SSN | Case Number | Start Date | End Date
123456 | 0000000 | 01/01/2010 | 12/31/2012
123456 | 1111111 | 01/01/2013 | 05/31/2014
123456 | 2222222 | 06/01/2014 | 11/10/2015
如何根据服务日期将VLOOKUP置于"范围内"另一张纸的开始和结束日期?
在这种情况下,我想查找SSN
并返回案例编号2222222
,因为这种服务日期是有效的。
我在线查找并找到了#34; MATCH"。我可以匹配案例的第一个结果与SSN
匹配,但是如果它不匹配,如何进入下一个案例?
=IF(E2>=INDEX('CASE NUMBERS'!A:F,MATCH(C2,'CASE NUMBERS'!A:A,0),4)&E2<=INDEX('CASE NUMBERS'!A:F,MATCH(C2,'CASE NUMBERS'!A:A,0),5),"YES","NO")
我在Windows 7上使用Excel 2013。
答案 0 :(得分:3)
您需要3个条件。 a)开始日期是否小于服务日期b)结束日期是否大于服务日期和c)SSN号码是否匹配?
使用较新的AGGREGATE¹ function强制任何不匹配进入错误状态,同时使用忽略错误选项(例如 6 )来丢弃错误。
=INDEX(Sheet2!$B$2:$B$9999, AGGREGATE(15, 6, ROW($1:$9998)/((Sheet2!C$2:C$9999<=B2)*(Sheet2!D$2:D$9999>=B2)*(Sheet2!A$2:A$9999=A2)), 1))
对于所有意图和目的,工作表公式将FALSE视为零(例如0
),将TRUE视为一(例如1
)。任何乘以零的数字都是零,任何数字乘以1都是相同的数字。 AGGREGATE函数正在检索Sheet2中第一个匹配的行位置!B2“B9999。该行位置将是ROW(1:9998)内的某个数字。任何与所有三个条件都不匹配的行将至少具有一个零乘以分母。这使得分母为零。任何除以零的力都会导致#DIV/0!
误差,而AGGREGATE将丢弃结果集中的那些.AGGREGATE的 15 选项是{{3最后的 1 是SMALL的 k 序数(非常小)。所有匹配所有三个条件的行中,AGGREGATE返回最低的一个到SMALL从Sheet2中检索值!B2“B9999。
将范围收紧至最多5行,并使用INDEX function命令逐步完成公式并更好地理解。
值得注意的是,将此公式转换为检索第二,第三等匹配也非常容易,因为它只需要对 k 序列进行排序。
¹ Excel 2010引入了Evaluate Formula。早期版本不提供。
答案 1 :(得分:2)
如果SSN
位于两张工作表的A1中且您的Case Number
是数字(0000000
除外),那么您可以尝试:
=SUMIFS(Sheet2!B:B,Sheet2!A:A,A2,Sheet2!C:C,"<="&B2,Sheet2!D:D,">="&B2)
解释SUMIFS How to define two-dimensional array in python(以及其他地方!)。
答案 2 :(得分:1)
此数组公式将始终打印最后一个匹配项:
=INDEX(Sheet2!B:B,MAX((Sheet2!A:A=A2)*(Sheet2!C:C<=B2)*(Sheet2!D:D>=B2)*ROW(A:A)))
这是一个数组公式,必须使用 Ctrl + Shift + Enter 确认。
! 但是,您应该尽可能缩短范围。 (这是对整张纸的巨大计算)