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

Aar*_*min 1 excel if-statement formula excel-formula airtable

我是写公式来操纵数据的新手。我正在使用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"))))))))))))))))))))))))
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

For*_* Ed 5

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

前两个选项将取决于将结果布置在矩阵中。之所以有效,是因为您有两个选择:FUNCTIONAL和DYSFUNCTIONAL

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

示例表

选项1

使用的组合INDEXMATCH。该INDEX公式将返回选定范围的给定行号和列号的单元格/范围的地址。它使用以下格式:

INDEX(SELECTED RANGE,ROW NUMBER, COLUMN NUMBER)
Run Code Online (Sandbox Code Playgroud)

重要的是要注意,行号和列号是指所选范围,而不是工作表中的列。唯一的情况是这两者都是相同的,如果所选范围从A1开始。

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

=INDEX($D$4:$H$8,
Run Code Online (Sandbox Code Playgroud)

因为我通常不希望将选择的范围复制到另一个单元格时更改,所以我习惯于用$锁定范围单元格引用。

下一步需要提供行号。为此,该MATCH功能运行良好。该MATCH函数将在定义的范围内查找给定值,并返回其在该范围内的位置。您还可以根据近似值,最接近的类型搜索或与功能最接近的逆向设置所需的查找类型...请注意,要使后两者起作用,需要对范围进行排序,对于较晚使用该范围需要按相反顺序排序。的一般格式MATCH如下:

MATCH(WHAT YOU ARE LOOKING FOR, RANGE TO LOOK, SEARCH OPTION)
Run Code Online (Sandbox Code Playgroud)

在本例中,您要匹配功能障碍评分。在这种情况下,功能障碍评分位于单元格D12中。因此,MATCH公式应如下所示:

=MATCH($D$12,$C$4:$C$8,0)
Run Code Online (Sandbox Code Playgroud)

最后的0 MATCH表示需要完全匹配。由于返回行号,因此可以将其直接放入INDEX行号的公式中,现在公式如下所示:

=INDEX($D$4:$H$8,MATCH($D$12,$C$4:$C$8,0),
Run Code Online (Sandbox Code Playgroud)

现在需要确定列号。再次MATCH可以使用该功能,这次查找范围是水平而不是垂直。由于功能分数在D11中,因此公式应类似于:

=MATCH($D$11,$D$3:$H$3,0)
Run Code Online (Sandbox Code Playgroud)

由于这将返回选定范围的列号,因此我们可以将其直接转储到INDEX公式中,并得出如下结果:

=INDEX($D$4:$H$8,MATCH($D$12,$C$4:$C$8,0),MATCH($D$11,$D$3:$H$3,0))
Run Code Online (Sandbox Code Playgroud)

选项2

此选项非常相似,可以INDEX根据您非常特定的分数选项使用和进行一些数学运算。该表的布局对于此示例从最小到最大非常具体。同样,所有分数都可以被2整除,从而在分数-2,-1、0、1、2之间增加1。现在,如果将其加3,则得到1、2、3、4、5,其中碰巧与您的行和列选项相对应。因此,如果我们用MATCH一点点数学代替选项1,则INDEX公式变为:

=INDEX($D$4:$H$8,$D$12/2+3,$D$11/2+3)
Run Code Online (Sandbox Code Playgroud)

选项3

这只是IF类似于您的嵌套,但是将结果分组在一起而不是列出每个单元格选项。各个IF功能的逻辑不能单独发挥作用。但是,它们按照嵌套的顺序工作,因为如果TRUE条件导致前面的IF函数之一,则返回一个字母,并且不检查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")))))
Run Code Online (Sandbox Code Playgroud)

概念证明

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

调整单元格和范围参考以适合您的需求。

选项4

AGGREGATE做比赛的工作。由于AGGREGATE返回工作表的列号,因此需要通过减去标题行/列号来将其调整到所选范围。无需进一步解释,公式为:

=INDEX($D$4:$H$8,AGGREGATE(15,6,ROW($C$4:$C$8)/($C$4:$C$8=$D$12),1)-ROW($C$3),AGGREGATE(15,6,COLUMN($D$3:$H$3)/($D$3:$H$3=$D$11),1)-COLUMN($C$3))
Run Code Online (Sandbox Code Playgroud)