满足IF条件的VLOOKUP

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

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 

如何根据服务date将VLOOKUP设置在另一张工作表的开始date和结束date的“范围”内?

在这种情况下,我想查找SSN和返回案件号码2222222因为在这种服务date情况下是有效的。

我在网上查找“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。

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

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

SUMIFS 在这里解释(和其他地方!)。

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

使用更新的AGGREGATE¹函数可以在使用忽略错误选项(例如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)) 

多条件VLOOKUP

对于所有意图和目的,工作表公式将FALSE作为零(例如0 )和TRUE作为一个(例如1 )。 任何乘以零的数字都是零,任何乘以一的数字都是相同的数字。 AGGREGATE函数检索Sheet2!B2“B9999中第一个匹配的行位置,该行位置将是ROW(1:9998)内的一个数字,任何不符合所有三个条件的行将至less有一个零乘以分母这使得分母为零任何被零除的力强制一个#DIV/0!错误,并且AGGREGATE将丢弃结果集中的那些,AGGREGATE的15选项是SMALL ,最后的1k的序数小(最小),所有符合所有三个条件的行,AGGREGATE将最低的一个返回到INDEX函数 ,该函数从Sheet2!B2“B9999中检索值。

将范围最大限度地增加到5行,并使用“ 评估公式”命令逐步浏览公式,并获得更好的理解。

值得注意的是,将这个公式转换成检索第二,第三等匹配是非常容易的,因为它只需要sorting第k个序数。


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

这个数组公式会一直打印最后一个匹配项:

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

这是一个数组公式,并且必须用Ctrl + Shift + Enter确认

  • 如果有多个符合标准的解决scheme,它就可以工作
  • 它也适用于你想显示的每种数据(值/date/string)

但是,您应该尽可能缩短范围。 (它是整个表格的一个巨大的计算)