使用ARRAYFORMULA格式时计算结果发生变化

问题描述 投票:0回答:3

我想在 ARRAYFORMULA 中使用以下公式:

=IF(IFERROR(OR(VLOOKUP($A2, DATA!$A$2:D, 3, FALSE), VLOOKUP($A2, DATA!$A$2:D, 4, FALSE)), FALSE), "SENT", IF(IFERROR(NOT(ISNA(VLOOKUP($A2, REJECTED!$A$2:A, 1, FALSE))), FALSE), "REJECTED", ""))

使用此公式并将其向下拖动效果非常好;所有值都正确评估。

但是,当我进行必要的更改以将其与 ARRAYFORMULA 一起使用时,第一个 if 条件的行为有所不同。

第一行 A2 的评估从 TRUE 切换到 FALSE。

这可能是什么原因?

我创建了一个测试表来复制我遇到的问题:

https://docs.google.com/spreadsheets/d/1MuBstN9tqVccSExTnI7GOQxfu9OK-nqgyoTHq_pJqYE/edit?usp=sharing

感谢我能得到的任何帮助!

google-sheets google-sheets-formula vlookup array-formulas
3个回答
1
投票

您可以使用 BYROW 或 MAP 来扫描您的整个范围:

=BYROW(A2:A,LAMBDA(each,IF(each="","",IF(IFERROR(OR(VLOOKUP(each, DATA!$A$2:D, 3, FALSE), VLOOKUP(each, DATA!$A$2:D, 4, FALSE)), FALSE), "SENT", IF(IFERROR(NOT(ISNA(VLOOKUP(each, REJECTED!$A$2:A, 1, FALSE))), FALSE), "REJECTED", "")))))
 

0
投票

我认为你可以简化公式。试试-

=MAP(A2:INDEX(A2:A,COUNTA(A2:A)),LAMBDA(x,IF(ISERROR(OR(FILTER(DATA!C2:D,DATA!A2:A=x))),
IF(ISNUMBER(XMATCH(x,REJECTED!A2:A)),"REJECTED",""),"SENT")))


0
投票

尝试:

=ArrayFormula(IF(IFERROR(IF((VLOOKUP($A2:A, DATA!$A$2:D, 3, FALSE)+ VLOOKUP($A2:A, DATA!$A$2:D, 4, FALSE)=1),"TRUE","FALSE"), FALSE), "SENT", IF(IFERROR(NOT(ISNA(VLOOKUP($A2:A, REJECTED!$A$2:A, 1, FALSE))), FALSE), "REJECTED", "")))

结果:

说明:

您的公式不起作用的原因是因为将

OR
arrayformula
一起使用具有不同的行为。您可以将其替换为“
+
”,这将返回
1 or 0.
然后使用
IF
条件使其返回TRUE如果1FALSE如果0。区别见下图:


来自:

OR(VLOOKUP($A2:A, DATA!$A$2:D, 3, FALSE), VLOOKUP($A2:A, DATA!$A$2:D, 4, FALSE))

收件人:

IF((VLOOKUP($A2:A, DATA!$A$2:D, 3, FALSE)+ VLOOKUP($A2:A, DATA!$A$2:D, 4, FALSE)=1),"TRUE","FALSE")

您也可以参考我找到的这个参考视频了解更多详情: 如何在 Google 表格上使用 AND / OR 和 ARRAYFORMULA? |表黑客

© www.soinside.com 2019 - 2024. All rights reserved.