满足 IF 条件的 VLOOKUP

VLOOKUP with IF conditions are met

我在工作中遇到了这个问题,需要用正确的案例编号填充作品sheet。

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,使其在另一个 sheet 的开始日期和结束日期的 "range" 之内?

在这种情况下,我想查找 SSN 和 return 案例编号 2222222,因为该案例在该服务日期有效。

我在网上查找并找到 "MATCH"。我能匹配到case的第一个结果匹配到SSN,但是如果不匹配怎么去下一个case?

=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。

此数组公式将始终打印最后一个匹配项:

=INDEX(Sheet2!B:B,MAX((Sheet2!A:A=A2)*(Sheet2!C:C<=B2)*(Sheet2!D:D>=B2)*ROW(A:A)))

This is an array formula and must be confirmed with Ctrl+Shift+Enter.

  • 如果有多个符合条件的解决方案,它会起作用
  • 它也适用于您想要显示的各种数据(values/dates/strings)

! 但是,您应该尽可能缩短范围。 (整个 sheet 的计算量很大)

你需要3个条件。 a) 开始日期是否小于服务日期 b) 结束日期是否大于服务日期 c) SSN 号码是否匹配?

使用更新的 AGGREGATE¹ function 强制任何不匹配项进入错误状态,同时使用忽略错误选项(例如 6)丢弃错误。

=INDEX(Sheet2!$B:$B99, AGGREGATE(15, 6, ROW(:98)/((Sheet2!C:C99<=B2)*(Sheet2!D:D99>=B2)*(Sheet2!A:A99=A2)), 1))

出于所有意图和目的,工作表公式将 FALSE 视为零(例如 0),将 TRUE 视为一(例如 1)。任何数乘以零都是零,任何数乘以一都是同一个数。 AGGREGATE 函数正在检索 Sheet2!B2"B9999. That row position will be a number somewhere within ROW(1:9998). Any of the rows that do not match all three condition will have at least one zero multiplied by the denominator. This makes the denominator zero. Anything divided by zero forces a #DIV/0! error and AGGREGATE will discard those from the result set. AGGREGATE's 15 option is the SMALL and the last 1 is the k ordinal for SMALL (the very smallest). So of all the rows that match all three conditions, AGGREGATE returns the lowest one to the INDEX function which retrieves the value from Sheet2!B2"B9999.

中第一个匹配项的行位置

将范围缩小到最多 5 行,并使用 Evaluate Formula 命令逐步查看公式并获得更好的理解。

可能值得注意的是,转换此公式以检索第二个、第三个等匹配项也非常容易,因为它只需要对 k 序数进行排序向上。


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

如果 SSN 在两张纸的 A1 中,并且您的 Case Number 是数字(0000000 除外),那么您可以尝试:

=SUMIFS(Sheet2!B:B,Sheet2!A:A,A2,Sheet2!C:C,"<="&B2,Sheet2!D:D,">="&B2)  

SUMIFS 得到了解释 here(以及其他地方!)。