例如,有 3 名学生,每个单元的分数不同。我希望分数为 5 或更低的单元显示在“学生需要关注”列中,而无需查看表格。从左侧开始的第一个 5 或更低的值应该是列名的参考点,完全忽略右侧满足相同要求的其他列。如果我的解释令人困惑(因为它让我感到困惑哈哈),请查看表格,这是我想要的结果。加粗部分是我希望 excel 计算和输出的内容。
答案1
答案2
在您的示例中,假设左上角的单元格是 A1,则整个表格位于范围 A1:E4 中,而实际分数位于 B2:D4 中。
鉴于此,以下公式可以完成此任务:
=SMALL(IFERROR((B3:I3<=5)*SEQUENCE(1,COUNT(B3:I3))/((B3:I3<=5)*SEQUENCE(1,COUNT(B3:I3)))*(B3:I3<=5)*SEQUENCE(1,COUNT(B3:I3)),""),1)
看起来很丑陋,对吧?但实际上比看起来简单得多。(B3:I3<=5)*SEQUENCE(1,COUNT(B3:I3))
是基本元素。对于任何 >5 的分数,它都会产生 0。要删除这些,它会除以自身,这样它会在 0 所在的地方返回错误。但是对于 <=5 的单元格,它返回了它们所在的列,而我们想要这些数字。除以自身会将它们更改为 1。因此,我们将该除法结果乘以该元素,返回 <=5 的列号。这些错误仍然是错误。
现在我们IFERROR()
围绕整个结果编写一个函数,将错误更改为空白。这使得 <=5 列号成为仅剩的非空白值。然后我们SMALL()
围绕编写一个函数IFERROR()
并告诉它返回最小值,由于它们是列号,因此它是行中第一个 <=5 分数。
您显示期望的回报是“单位”和一个数字。我编写的公式完全按照您显示的内容运行,因此它将单词“单位”和列号串在一起。
您的实际情况可能稍微复杂一些。如果不是,只需使用上面的方法并根据需要更改这些单元格引用。但如果这些标题不太规则,可能是“英语|数学|科学”,那么您需要采用公式并在其周围包装一个函数,即INDEX()
:
=INDEX(B1:D1,1,SMALL(IFERROR((B3:D3<=5)*SEQUENCE(1,COUNT(B3:D3))/((B3:D3<=5)*SEQUENCE(1,COUNT(B3:D3)))*(B3:D3<=5)*SEQUENCE(1,COUNT(B3:D3)),""),1))
INDEX()
取一个范围,在本例中为 B1:D1,并返回其中的特定行和列。只有 1 行,所以很简单,列来自第一个公式。然后,它返回包含第一个 <=5 分数的列的列标题。
顺便说一下,对于第一个公式,使用函数的更好看的版本LET()
如下所示:
=LET(Column, (B2:D2<=5)*SEQUENCE(1,COUNT(B2:D2))+0,
SMALL(IFERROR(Column/Column*Column,""),1))
那个又长又难看的第一个公式变得合理了SMALL(IFERROR(Column/Column*Column,""),1)
,最后一个公式将是:
=LET(Column, (B2:D2<=5)*SEQUENCE(1,COUNT(B2:D2))+0,
INDEX(B1:D1,1,SMALL(IFERROR(Column/Column*Column,""),1)))