满足IF条件的VLOOKUP

时间:2015-11-10 14:57:40

标签: excel excel-formula vlookup worksheet-function sumifs

我在工作中遇到此问题,使用正确的案例编号填充工作表。

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。

3 个答案:

答案 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))

Multiple criteria VLOOKUP

对于所有意图和目的,工作表公式将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 确认。

  • 如果有多个符合标准的解决方案
  • ,则有效
  • 它也适用于您想要显示的各种数据(值/日期/字符串)

但是,您应该尽可能缩短范围。 (这是对整张纸的巨大计算)