【问题标题】:VLOOKUP with IF conditions are met满足 IF 条件的 VLOOKUP
【发布时间】:2015-11-10 14:57:40
【问题描述】:

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

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

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

【问题讨论】:

  • 表 2 中的数据是否始终按SSN 和Start Date 排序?或者它是否可以混合在一起以使并非所有SSNs 都组合在一起? (我想你总是可以通过自己排序来确保它是排序的)
  • @ScottHoltzman 他们没有排序,但我通常自己在 Excel 中排序

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


【解决方案1】:

您将需要 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)。任何数乘以零都是零,任何数乘以一都是同一个数。 AGGREGATE 函数正在检索 Sheet2!B2"B9999 中第一个匹配项的行位置。该行位置将是 ROW(1:9998) 中某处的数字。任何不匹配所有三个条件的行将至少具有一个零乘以分母。这使分母为零。任何除以零都会导致 #DIV/0! 错误,并且 AGGREGATE 将从结果集中丢弃这些错误。AGGREGATE 的 15 选项是 SMALL 和最后一个 1 是 SMALL 的 k 序数(最小的)。因此,在匹配所有三个条件的所有行中,AGGREGATE 将最低的行返回给INDEX function从 Sheet2!B2"B9999 中检索值。

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

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


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

【讨论】:

  • 您能解释一下解决方案吗?我无法将此代码添加到我的报告中,'$' 是否必要?我有#NUM!所有行都出错。
  • 仅当您填写时。 $ 锁定行,因此您在填充时不会移动单元格范围。将在上面解释。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    • 如果有多个符合条件的解决方案,它就可以工作
    • 它还适用于您要显示的各种数据(值/日期/字符串)

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

    【讨论】:

    • 那些完整的列范围引用将影响计算滞后。即使使用一个公式,我也注意到几乎整整一秒钟才能产生结果。
    • 我没有注意到这个公式少于 30 个副本的滞后...但是,由于我的电脑(服务器)的强大功能,我将其包括在内
    猜你喜欢
    • 2018-12-21
    • 2019-03-14
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2012-12-17
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多