1

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

谢谢您的帮助!

4

1 回答 1

5

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

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

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

示例表

选项1

使用INDEX和的组合MATCH。该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)

最后的 0MATCH表示需要完全匹配。由于返回的是行号,因此可以直接将其放入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恰好对应于您的行和列选项。因此,如果我们用MATCH一点点数学替换选项 1,那么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))
于 2019-03-19T01:27:44.067 回答