我可以简化 Airtable 公式的 if 语句吗?

Can I simplify an if-statement for an Airtable formula?

我对编写公式来处理数据还很陌生。我正在使用 Airtable 收集调查反馈,并根据提供的 2 个分数为每个回复分配一个类别。每个或两个分数可以是 -4、-2、0、2 或 4。根据分数的组合,响应将分为六个类别之一。

为此,我编写了一个 If/And 公式(有效),但我想知道是否有更简单、更清晰的方法来实现此目的:

IF(AND({Functional score}=4,{Dysfunctional score}=4),"Q",
IF(AND({Functional score}=-4,{Dysfunctional score}=-4),"Q",
IF(AND({Functional score}=2,{Dysfunctional score}=2),"Q",
IF(AND({Functional score}=-2,{Dysfunctional score}=-2),"Q",
IF(AND({Functional score}=0,{Dysfunctional score}=0),"I",
IF(AND({Functional score}=4,{Dysfunctional score}=2),"A",
IF(AND({Functional score}=4,{Dysfunctional score}=0),"A",
IF(AND({Functional score}=4,{Dysfunctional score}=-2),"A",
IF(AND({Functional score}=4,{Dysfunctional score}=-4),"P",
IF(AND({Functional score}=2,{Dysfunctional score}=4),"R",
IF(AND({Functional score}=2,{Dysfunctional score}=0),"I",
IF(AND({Functional score}=2,{Dysfunctional score}=-2),"I",
IF(AND({Functional score}=2,{Dysfunctional score}=-4),"M",
IF(AND({Functional score}=0,{Dysfunctional score}=4),"R",
IF(AND({Functional score}=0,{Dysfunctional score}=2),"I",
IF(AND({Functional score}=0,{Dysfunctional score}=-2),"I",
IF(AND({Functional score}=0,{Dysfunctional score}=-4),"M",
IF(AND({Functional score}=-2,{Dysfunctional score}=4),"R",
IF(AND({Functional score}=-2,{Dysfunctional score}=2),"I",
IF(AND({Functional score}=-2,{Dysfunctional score}=0),"I",
IF(AND({Functional score}=-4,{Dysfunctional score}=4),"R",
IF(AND({Functional score}=-4,{Dysfunctional score}=2),"R",
IF(AND({Functional score}=-4,{Dysfunctional score}=0),"R",
IF(AND({Functional score}=-4,{Dysfunctional score}=-2),"R",
"Q"))))))))))))))))))))))))

感谢您的帮助!

在 excel 中有多种方法可以做到这一点。由于这个问题被标记为 excel-公式,我将提供一些使用 excel 公式的选项。

前两个选项取决于在矩阵中布置结果。这是有效的,因为你有两个选择:FUNCTIONAL 和 DYSFUNCTIONAL

在此示例中,假定数据布局如下:

选项 1

使用 INDEXMATCH 的组合。 INDEX 公式将 return 的地址 cell/range 对于给定的行号和选定范围的列号。它使用以下格式:

INDEX(SELECTED RANGE,ROW NUMBER, COLUMN NUMBER)

请务必注意,行号和列号是参考所选范围,而不是参考工作表的列。如果所选范围从 A1 开始,则两者的唯一情况是相同的。

根据此信息,公式的开头将如下所示:

=INDEX($D:$H,

因为我通常不希望我选择的范围在复制到另一个单元格时发生变化,所以我习惯用 $.

锁定范围单元格引用

接下来需要的部分是提供行号。为此,MATCH 函数运行良好。 MATCH 函数将在定义的范围内查找给定值,并 return 它在该范围内的位置。您还可以根据近似值和最近的太类型搜索或最接近函数的反向设置查找类型...请注意,要使后两者正常工作,需要对范围进行排序,并且对于以后工作​​的范围需要按相反的顺序排序。 MATCH的一般格式如下:

MATCH(WHAT YOU ARE LOOKING FOR, RANGE TO LOOK, SEARCH OPTION)

在我们的例子中,您想要匹配功能障碍分数。在这种情况下,功能失调的分数位于单元格 D12 中。因此 MATCH 公式应如下所示:

=MATCH($D,$C:$C,0)

末尾的 0 告诉 MATCH 需要精确匹配。由于 return 是行号,因此可以直接将其放入行号的 INDEX 公式中,公式现在如下所示:

=INDEX($D:$H,MATCH($D,$C:$C,0),

现在需要确定列号。再次可以使用 MATCH 函数,这次要查看的范围是水平的而不是垂直的。由于功能分数在 D11 中,因此公式应如下所示:

=MATCH($D,$D:$H,0)

由于 return 是所选范围的列号,我们可以将其直接转储到我们的 INDEX 公式中,该公式结束后看起来像:

=INDEX($D:$H,MATCH($D,$C:$C,0),MATCH($D,$D:$H,0))

选项 2

此选项非常相似,使用 INDEX 和一些基于您非常具体的分数选项的数学运算。 table 布局对于这个例子来说是非常具体的,从最小到最大。此外,您的所有分数都可以被 2 整除,分数之间的增量为 1,-2、-1、0、1、2。现在,如果您将 3 添加到该分数上,您将得到 1、2、3、4、5,这恰好对应于您对行和列的选择。因此,如果我们用那一点点数学替换选项 1 中的 MATCH,则 INDEX 公式变为:

=INDEX($D:$H,$D/2+3,$D/2+3)

选项 3

这只是一个嵌套的 IF,与您的类似,但将结果分组在一起,而不是列出每个单元格选项。各个 IF 函数的逻辑不能独立运行。然而,它们确实按照它们嵌套的顺序工作,因为如果一个 TRUE 条件导致先前的 IF 函数之一,一个字母被 returned,并且 IF 函数的其余级别不会得到检查。大量嵌套的 IF 函数可能难以阅读,更不用说当您在一个月或更长时间后回来并试图弄清楚您做了什么时难以维护。对于第一次阅读它试图弄清楚发生了什么的可怜的笨蛋来说更糟糕。因此,将结果组合在一起的嵌套 IF 函数可能如下所示:

=IF(AND(D11=D12,D11<>0),"Q",IF(OR(D11=-4,D12=4),"R",IF(AND(D11=4,D12=-4),"P",IF(D12=-4,"M",IF(D11=4,"A","I")))))

还有其他选项可以使用数组函数。如果您的数据有 2 个以上的选项 (FUNCTIONAL/DYSFUNCTIONAL),那么还有其他选项用于布置数据。对于 excel 我建议使用 table 以提高可读性和可维护性,但您必须决定哪种方法最适合您的情况。

根据您的需要调整单元格和范围引用。

选项 4

使用AGGREGATE完成MATCH的工作。由于AGGREGATEreturn工作表列号,需要减去表头row/column号调整到选中范围。没有任何进一步的解释,公式是:

=INDEX($D:$H,AGGREGATE(15,6,ROW($C:$C)/($C:$C=$D),1)-ROW($C),AGGREGATE(15,6,COLUMN($D:$H)/($D:$H=$D),1)-COLUMN($C))