Excel 满足IF条件的VLOOKUP

Excel 满足IF条件的VLOOKUP,excel,excel-formula,vlookup,worksheet-function,sumifs,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

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

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
,因为这是该服务日期的有效案例

我在网上查找,找到了“匹配”。我能够匹配案例的第一个结果与
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")

=IF(E2>=INDEX('CASE number'!A:F,MATCH(C2,'CASE number'!A:A,0),4)&E2此数组公式将始终打印最后一个匹配项:

=INDEX(Sheet2!B:B,MAX((Sheet2!A:A=A2)*(Sheet2!C:C<=B2)*(Sheet2!D:D>=B2)*ROW(A:A)))
=索引(Sheet2!B:B,MAX((Sheet2!A:A=A2)*(Sheet2!C:C=B2)*行(A:A)))
这是一个数组公式,必须用Ctrl+Shift+Enter确认

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

但是,您应该尽可能缩短范围。(这对整个工作表来说是一个巨大的计算)

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

=INDEX(Sheet2!B:B,MAX((Sheet2!A:A=A2)*(Sheet2!C:C<=B2)*(Sheet2!D:D>=B2)*ROW(A:A)))
=索引(Sheet2!B:B,MAX((Sheet2!A:A=A2)*(Sheet2!C:C=B2)*行(A:A)))
这是一个数组公式,必须用Ctrl+Shift+Enter确认

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

但是,您应该尽可能缩短范围。(这对整个工作表来说是一个巨大的计算)

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

在使用忽略错误选项(例如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))
=索引(Sheet2!$B$2:$B$9999,合计(第15、6行($1:$9998)/(Sheet2!C$2:C$9999=B2)*(Sheet2!A$2:A$9999=A2)),1))

无论出于何种目的,工作表公式都将FALSE视为零(例如
0
),将TRUE视为一(例如
1
)。任何数字乘以零即为零,任何数字乘以一即为同一数字。聚合函数正在检索Sheet2中第一个匹配项的行位置!B2“B9999。该行位置将是行(1:9998)中的某个数字。与所有三个条件都不匹配的任何行将至少有一个0乘以分母。这将使分母为零。任何除以零的值都将强制执行
#DIV/0!
错误,聚合将从结果集中丢弃这些值。聚合的15选项为,最后一个1选项为k序数表示小(最小)。因此,在所有匹配所有三个条件的行中,AGGREGATE将最低的一行返回给,该行从Sheet2!B2“B9999中检索值

将范围限制为最多5行,并使用命令逐步完成公式并获得更好的理解

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



⑨Excel 2010中引入了。它在早期版本中不可用。

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

在使用忽略错误选项(例如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))
=索引(Sheet2!$B$2:$B$9999,合计(第15、6行($1:$9998)/(Sheet2!C$2:C$9999=B2)*(Sheet2!A$2:A$9999=A2)),1))

无论出于何种目的,工作表公式都将FALSE视为零(例如
0
),将TRUE视为一(例如
1
)。任何数字乘以零即为零,任何数字乘以一即为同一数字。聚合函数正在检索Sheet2中第一个匹配项的行位置!B2“B9999。该行位置将是行(1:9998)中的某个数字。与所有三个条件都不匹配的任何行将至少有一个0乘以分母。这将使分母为零。任何除以零的值都将强制执行
#DIV/0!
错误,聚合将从结果集中丢弃这些值。聚合的15选项为,最后一个1选项为k序数表示小(最小)。因此,在所有匹配所有三个条件的行中,AGGREGATE将最低的一行返回给,该行从Sheet2!B2“B9999中检索值

将范围限制为最多5行,并使用命令逐步完成公式并获得更好的理解

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



⑨Excel 2010中引入了。在早期版本中不可用。

如果两张表的A1中都有
SSN
,并且您的
箱号是数字的(而不是
0000000
),则您可以尝试:

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

SUMIF已解释(和其他地方!)。

如果两张表的A1中都有
SSN
,并且您的
箱号是数字的(而不是
0000000
),则您可以尝试:

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

SUMIFS已解释(以及其他地方!)。

表2中的数据是否始终按
SSN
开始日期进行排序?或者它可能会混合在一起,以至于不是所有的
SSN
s都被分组在一起?)我想你可以