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

标签 arrays excel if-statement excel-formula compare

摘要:
我希望提高/完全重写我为比较两个不同数据集而编写的公式的效率,其输出将根据第三个数据集而变化。这在一个语句中完成了 6 次。我目前的方法有效,但我毫不怀疑有更好的方法,但我不知道从哪里开始。
使用示例:
If A1="NO" , I want to search my 6 datasets and find the first FALSE result in C1 , F1 , I1 , L1 , O1 or R1 regardless of the content in cells D1 , F1 , J1 , M1 , P1 or S1 , then find找出 FALSE 所在的数据集。
如果 A1="YES" ,我想搜索我的 6 个数据集并在 FALSEC1F1I1L1O1 中找到第一个 R1 结果,只要右侧相邻单元格的日期早于 2012
具有上述标准的示例表,在 FORMULAHERE 中具有正确的输出:


PRE2012
数据1
数据1无效?
数据1 日期
数据2
数据2无效?
数据2 日期
数据3
数据3无效?
数据3 日期
数据4
数据4无效?
Data4 日期
数据5
数据5无效?
数据5 日期
数据6
数据6无效?
数据6 日期
公式在这里



AAA
真的
2020 年 1 月 1 日
BBB
错误的
2018 年 1 月 1 日
CCC
真的
2015 年 1 月 1 日
DDD
真的
2013 年 1 月 1 日
电子电气设备
真的
2010 年 1 月 1 日
FFF
错误的
2009 年 1 月 1 日
“使用数据 2”


111
错误的
2020 年 1 月 1 日
222
错误的
2018 年 1 月 1 日
333
真的
2015 年 1 月 1 日
444
真的
2013 年 1 月 1 日
555
真的
2010 年 1 月 1 日
666
错误的
2009 年 1 月 1 日
“使用数据 1”

是的
美国广播公司
真的
2020 年 1 月 1 日
国防军
错误的
2018 年 1 月 1 日
全局健康指数
真的
2015 年 1 月 1 日
JKL
真的
2013 年 1 月 1 日
移动网络运营商
真的
2010 年 1 月 1 日
二维码
错误的
2009 年 1 月 1 日
“使用数据 6”

是的
123
真的
2020 年 1 月 1 日
456
错误的
2018 年 1 月 1 日
789
真的
2015 年 1 月 1 日
012
真的
2013 年 1 月 1 日
345
错误的
2010 年 1 月 1 日
678
错误的
2009 年 1 月 1 日
“使用数据 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$1:Q$1,"",0)
请注意,您可以替换 ""如果没有找到任何值,您想显示的任何值。

这里的逻辑:
  • XLOOKUP()可用于在值的范围/数组(第二个参数)中查找某个值(第一个参数),并将返回该完全相同的索引/位置(第三个参数)上的相对值。第 4 个参数如果未找到则返回该值,其中第 5 个参数是断言找到的值是完全匹配而不是近似值;
  • 第一个参数 - 我们正在寻找值“1”。它会在下面变得清晰;
  • 第二个参数 - 我们只使用了 TRUE 的 bool 结构。或 FALSE值(或数字)。在 Excel 中,“(A=X)(B=Y)”结构将评估为“TRUETRUE”,因此进一步评估为“1”。在这种情况下,我们同时评估 (C2:R2=FALSE)反对(IFS(A2="NO",1,A2="YES",D2:S2<DATE(2012,1,1))) .换句话说,我们将尝试找到上述计算结果为“1”的第一个位置;
  • 第三个参数 - “使用”和要返回的范围之间的连接,相对于我们使用的其他范围;
  • 4th Paremter - 如果没有找到值,你想返回的任何值,设置为 ""眼下;
  • 5th Paremter - 如前所述,这是为了断言我们正在寻找完全匹配而不是近似匹配。
  • IFS()似乎不言自明,但简而言之:如果“否”,则只需使用“1”,否则检查范围与 2012 年 1 月 1 日之前的日期。

    关于arrays - 将 2 个数据集与 1 个单元格内的值进行 6 次比较的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71127836/

    相关文章:

    c# - 如何在 C# 中向 Excel 范围添加底部边框?

    R dplyr mutate 不适用于 as.Date(NA) 'origin' 必须提供

    c++ - 使用指针运算将两个数组的内容相加并保存到一个空数组

    javascript - 有没有办法更新 HTML 中定义的现有数组?

    ruby-on-rails - 如何在哈希数组中找到最大值?

    c - if 语句代码 - 使其更简单 - 需要建议

    java - 我不知道如何将此 if 语句放入 while 循环中

    arrays - 如何使用 Golang 将数据放入结构中?

    excel - 如何在excel中链接工作表以允许插入新行

    excel - 使 HLOOKUP 不匹配子字符串,例如阿肯色州的堪萨斯州