将 2 个数据集与 1 个单元格内的值进行 6 次比较的公式
Formula to compare 2 data sets against a value 6 times within 1 cell
总结:
我希望提高效率/完全重写我编写的用于比较两个不同数据集的公式,其输出将根据第三个数据集而变化。这是在一个语句中完成 6 次。我目前的方法可行,但我相信还有更好的方法,但我不确定从哪里开始。
使用示例:
如果A1="NO"
,我想搜索我的6个数据集并在C1
、F1
、I1
、[=中找到第一个FALSE
结果15=]、O1
或 R1
无论单元格中的内容如何 D1
、F1
、J1
、M1
、P1
或S1
,然后找出FALSE
在哪个数据集中。
如果A1="YES"
,我想搜索我的6个数据集并在C1
、F1
、I1
、[=中找到第一个FALSE
结果15=]、O1
或 R1
只要右侧相邻单元格的日期早于 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”。它会在下面变得清晰;
- 第二个参数 - 我们只使用了
TRUE
或 FALSE
值(或数字)的布尔结构。在 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 之前的日期.
总结:
我希望提高效率/完全重写我编写的用于比较两个不同数据集的公式,其输出将根据第三个数据集而变化。这是在一个语句中完成 6 次。我目前的方法可行,但我相信还有更好的方法,但我不确定从哪里开始。
使用示例:
如果A1="NO"
,我想搜索我的6个数据集并在C1
、F1
、I1
、[=中找到第一个FALSE
结果15=]、O1
或 R1
无论单元格中的内容如何 D1
、F1
、J1
、M1
、P1
或S1
,然后找出FALSE
在哪个数据集中。
如果A1="YES"
,我想搜索我的6个数据集并在C1
、F1
、I1
、[=中找到第一个FALSE
结果15=]、O1
或 R1
只要右侧相邻单元格的日期早于 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”。它会在下面变得清晰;
- 第二个参数 - 我们只使用了
TRUE
或FALSE
值(或数字)的布尔结构。在 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 之前的日期.