【问题标题】:Can I simplify an if-statement for an Airtable formula?我可以简化 Airtable 公式的 if 语句吗?
【发布时间】:2019-03-19 00:05:49
【问题描述】:

我对编写公式来操作数据还很陌生。我正在使用 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"))))))))))))))))))))))))

感谢您的帮助!

【问题讨论】:

  • 可以安全地假设 Functional -2 和 Dysfunctional -4 是“M”吗?
  • 是的。没错。
  • 建个表,使用INDEX(table,MATCH(…),MATCH(…))从路口返回类别。
  • @RonRosenfeld 显然我需要更快地输入答案!
  • @Forwarded 我只是提出这个概念。你充实了它并解释了逻辑。

标签: excel if-statement excel-formula formula airtable


【解决方案1】:

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

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

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

选项 1

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

INDEX(SELECTED RANGE,ROW NUMBER, COLUMN NUMBER)

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

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

=INDEX($D$4:$H$8,

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

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

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

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

=MATCH($D$12,$C$4:$C$8,0)

末尾的 0 告诉 MATCH 需要完全匹配。由于返回的是行号,所以可以直接放入INDEX的行号公式中,现在的公式如下:

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

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

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

由于返回所选范围的列号,我们可以将其直接转储到我们的 INDEX 公式中,该公式结束并如下所示:

=INDEX($D$4:$H$8,MATCH($D$12,$C$4:$C$8,0),MATCH($D$11,$D$3:$H$3,0))

选项 2

此选项非常相似,可以使用INDEX 并根据您非常具体的分数选项进行一些数学操作。表格布局非常具体,适用于从最小到最大的示例。此外,您的所有分数都可以被 2 整除,以在分数 -2、-1、0、1、2 之间增加 1。现在,如果将 3 加到其中,则得到 1、2、3、4、5恰好对应于您的行和列选项。因此,如果我们将选项 1 中的 MATCH 替换为一点点数学运算,那么 INDEX 公式变为:

=INDEX($D$4:$H$8,$D$12/2+3,$D$11/2+3)

选项 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")))))

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

调整单元格和范围引用以满足您的需要。

选项 4

使用AGGREGATE 来完成 MATCH 的工作。由于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))

【讨论】:

  • 选项 1 似乎只适用于同一张纸。是否有原因这不适用于工作表?
  • @AaronBenjamin 不是我所知道的。确保在所有适当的单元格区域中引用了适当的工作表名称。
猜你喜欢
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
相关资源
最近更新 更多