将 2 个数据集与 1 个单元格内的值进行 6 次比较的公式

Formula to compare 2 data sets against a value 6 times within 1 cell

总结:

我希望提高效率/完全重写我编写的用于比较两个不同数据集的公式,其输出将根据第三个数据集而变化。这是在一个语句中完成 6 次。我目前的方法可行,但我相信还有更好的方法,但我不确定从哪里开始。

使用示例:

如果A1="NO",我想搜索我的6个数据集并在C1F1I1、[=中找到第一个FALSE结果15=]、O1R1 无论单元格中的内容如何 D1F1J1M1P1S1,然后找出FALSE在哪个数据集中。

如果A1="YES",我想搜索我的6个数据集并在C1F1I1、[=中找到第一个FALSE结果15=]、O1R1 只要右侧相邻单元格的日期早于 2012.

示例 table 符合上述条件,在 FORMULAHERE 中具有正确的输出:

PRE2012 Data1 Data1Invalid? Data1 Date Data2 Data2Invalid? Data2 Date Data3 Data3Invalid? Data3 Date Data4 Data4Invalid? Data4 Date Data5 Data5Invalid? Data5 Date Data6 Data6Invalid? Data6 Date FORMULAHERE
NO AAA TRUE 01/01/2020 BBB FALSE 01/01/2018 CCC TRUE 01/01/2015 DDD TRUE 01/01/2013 EEE TRUE 01/01/2010 FFF FALSE 01/01/2009 "USE DATA 2"
NO 111 FALSE 01/01/2020 222 FALSE 01/01/2018 333 TRUE 01/01/2015 444 TRUE 01/01/2013 555 TRUE 01/01/2010 666 FALSE 01/01/2009 "USE DATA 1"
YES ABC TRUE 01/01/2020 DEF FALSE 01/01/2018 GHI TRUE 01/01/2015 JKL TRUE 01/01/2013 MNO TRUE 01/01/2010 PQR FALSE 01/01/2009 "USE DATA 6"
YES 123 TRUE 01/01/2020 456 FALSE 01/01/2018 789 TRUE 01/01/2015 012 TRUE 01/01/2013 345 FALSE 01/01/2010 678 FALSE 01/01/2009 "USE DATA 5"

当前解法:

目前,通过使用以下 极其痛苦 =IF 语句,我的功能可以正常工作:

=IF(A1="Yes",(IF(AND(D1<DATE(2012,1,1),C1=FALSE),"Address 1",IF(A1="Yes",IF(AND(G1<DATE(2012,1,1),F1=FALSE),"Use Data 2",IF(A1="Yes",IF(AND(J1<DATE(2012,1,1),I1=FALSE),"Use Data 3",IF(A1="Yes",IF(AND(M1<DATE(2012,1,1),L1=FALSE),"Use Data 4",IF(A1="Yes",IF(AND(P1<DATE(2012,1,1),O1=FALSE),"Use Data 5",IF(A1="Yes",IF(AND(S1<DATE(2012,1,1),R1=FALSE),"Use Data 6",IF(A1="Yes",IF(R1=TRUE,"All Invalid",IF(A1="Yes",IF(AND(D1>DATE(2012,1,1),G1>DATE(2012,1,1),J1>DATE(2012,1,1),M1>DATE(2012,1,1),P1>DATE(2012,1,1),S1>DATE(2012,1,1)),"No Pre-2012 data on file","Review Manually")))))))))))))))),IF(A1="No",IF(C1=FALSE,"Address 1",IF(F1=FALSE,"Use Data 2",IF(I1=FALSE,"Use Data 3",IF(L1=FALSE,"Use Data 4",IF(O1=FALSE,"Use Data 5",IF(R1=FALSE,"Use Data 6",IF(R1=TRUE,"All Invalid","Review Manually.")))))))))

实现我想要的目标的最佳方法是什么?我希望学习,所以如果可能的话,任何进一步阅读以帮助我理解答案将不胜感激。谢谢!

使用 MSO365。谢谢!

如何将 IFS() 包含在 XLOOKUP() 中的相对范围:

=XLOOKUP(1,(C2:R2=FALSE)*(IFS(A2="NO",1,A2="YES",D2:S2<DATE(2012,1,1))),"Use "&B:Q,"",0)

请注意,如果找不到任何值,您可以将 "" 替换为您想要显示的任何值。


这里的逻辑:

  • XLOOKUP() 可用于在 range/array 值(第二个参数)中查找某个值(第一个参数),并且 return 完全相同 index/position(第三个参数)。第 4 个参数将 return 未找到的值,其中第 5 个参数是断言找到的值是精确匹配而不是近似值;
  • 第一个参数 - 我们正在寻找值“1”。它会在下面变得清晰;
  • 第二个参数 - 我们只使用了 TRUEFALSE 值(或数字)的布尔结构。在 Excel '(A=X)(B=Y)' 中,结构的计算结果类似于 'TRUETRUE',因此进一步计算为“1”。在这种情况下,我们对 (C2:R2=FALSE)(IFS(A2="NO",1,A2="YES",D2:S2<DATE(2012,1,1))) 进行评估。换句话说,我们将尝试找到上面的计算结果为 '1' 的第一个位置;
  • 第三个参数 - “使用”和要 return 的范围之间的连接,相对于我们使用的其他范围;
  • 第 4 个参数 - 如果没有找到任何值,请设置为 return;
  • 第 5 个参数 - 如前所述,这是为了断言我们正在寻找精确匹配而不是近似匹配。

IFS() 看起来更像是 self-explainatory 但简而言之:如果 'NO' 则只需使用 '1',否则检查范围与 1-1-2012 之前的日期.