我刚开始写公式来处理数据。我正在使用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"))))))))))))))))))))))))
谢谢您的帮助!
答案 0 :(得分:5)
在excel中有多种方法可以做到这一点。由于此问题是用excel公式标记的,因此我将使用excel公式提供一些选项。
前两个选项将取决于将结果布置在矩阵中。之所以有效,是因为您有两个选择:FUNCTIONAL和DYSFUNCTIONAL
在此示例中,假定数据布局如下:
使用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)
最后的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))
此选项非常相似,可以根据您非常具体的分数选项使用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)
这只是一个类似于您的嵌套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")))))
还有其他一些可以使用数组函数的选项。并且,如果您的数据有两个以上的选项(FUNCTIONAL / DYSFUNCTIONAL),则还有其他用于布置数据的选项。对于excel,我建议使用该表以提高可读性和可维护性,但是您必须决定哪种方法最适合您的情况。
调整单元格和范围引用以适合您的需求。
使用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))