使用 Excel 中的数组函数创建摘要 table 时遇到问题

Trouble using array functions in Excel to create summary table

我有一个table,一栏是教师名单,后面几栏是个人培训课程。我们的想法是,对于每门课程,我们都会有一名“首席导师”和另外三名“导师”,并且这些标签是根据选定教师的姓名分配的。所以它看起来像:

Teacher training1 training2 training3
john Lead tutor
bob Tutor Tutor Tutor
jane Tutor Tutor
alice Tutor Lead tutor
tim Tutor Tutor Tutor
gus Lead tutor

我正在尝试创建一个单独的摘要 table 以显示每门课程的分配对象,例如:

Lead tutor Tutor Tutor Tutor
training1 john bob alice tim
training2 alice bob jane tim
training3 gus bob jane tim

我知道我需要类似 index/match/small/if/column/row 的东西,但是在我在网上找到的所有示例中,我就是无法让它工作...

我最接近它工作的是:

{=IFERROR(INDEX($A$2:$A$14,SMALL(IF(G$2=$B$2:$C$14,ROW($B$2:$C$14)-1,"未分配"),COLUMNS($F$3:F3))),"")}

它没有给我错误消息,但也没有给我正确的结果...!

我已经在 GoogleDrive 上上传了我的尝试 - 如果有人可以阐明我做错了什么,我将不胜感激(我只在 youtube 上了解数组和 index/aggregate/match 但就是不能让我的脑袋转过来...!)

https://drive.google.com/file/d/1YKhKppAevNGrU_XFGe3IVNFOXynoKFiS/view?usp=sharing

提前致谢

我选择了 2 公式方法。拥有一个公式并将其复制到整个 table 会好得多,但我认为这种努力是不值得的。因此,我有以下公式来提取首席导师。 (183)

=INDEX(Table1[Teacher],MATCH(B,INDIRECT("Table1["&$A12&"]"),0))

为此,我将您的第一个 table 转换为覆盖范围 A1:D7 的 Excel table (Table1)。这是您 table 的精确副本。因此 headers 是“Teacher”、“Training1”、“Training2”和“Training3”。因此 Table1[Teacher] 等同于 A2:A7。您可以将一种语法替换为另一种语法,但使用 table 将为您提供一个动态范围,否则您必须创建该动态范围。

你的输出 table 在 A11:E14 范围内。因此我在 A12:A14 中有“Training1”、“Training2”和“Training3”。因此,INDIRECT("Table1["&$A12&"]" 指的是这些名称的 table 列,因为公式被向下复制。该组件在以下公式中具有显着特征。

上面的公式在B12,然后复制到B13:14。观察它对 B11 的引用,它从那里获得“首席导师”。更改其对 A12 的引用以捕获包含“Training1”的行,该行必须与 table.

中的列标题相匹配

这是单元格 C12 的公式。您可以像在 Office 365 中一样使用它,但在 Excel 的早期版本中它将是一个数组公式。数组公式需要通过 CTL + SHIFT + ENTER 确认。调整好后复制到C14:E14.

=INDEX(Table1[Teacher],SMALL(IF(INDIRECT("Table1["&$A12&"]")="Tutor",ROW(INDIRECT("Table1["&$A12&"]"))-ROW(INDEX(INDIRECT("Table1["&$A12&"]"),1))+1),COLUMN()-2))

此公式中存在不规则之处,我决定留给您修复。如您所见,它包含要在 table 中搜索的单词“导师”(不同于“首席导师”)。在我的测试 table 中,我在 C11:E11 中找到了这个词(从您的 table 设计中复制)并且应该从那里获取它,就像我在第一个涉及 B11 的公式中所做的那样。实际上,它将帮助您理解公式,但如果您是这样设置 table.

的,则可以将“导师”一词替换为 C

有一个对 table 的“教师”栏的引用和对 A12 的 3 个引用,上面已经解释过了。我提请你注意 COLUMN()-2)。当您在 C 列中输入此公式时,它将 return 1,并复制到右侧,它将计数为 2 和 3。这就是 SMALL 函数等级的定义方式。根据粘贴公式的列进行调整。

编辑

假设您不想将第一个 table 转换为 table,您可以通过分配的名称引用范围(并在该过程中动态化)。创建 4 个命名范围,如下所示:-

A2:A7 as "Teachers"
B2:B7 as "Training1"
C2:C7 as "Training2"
D2:D7 as "Training3"

观察到 3 个新命名范围的名称在 A12:A14 中。现在 B12 和 C12 的公式如下所示。

[B12] =INDEX(Teachers,MATCH(B,INDIRECT($A12),0))
[C12] = INDEX(Teachers,SMALL(IF(INDEX(INDIRECT($A12),,1)="Tutor",ROW(INDEX(INDIRECT($A12),,1))-ROW(INDEX(INDIRECT($A12),1))+1),COLUMN()-2))

我研究了一个要使用的公式。

在 G3 中使用以下内容:=LET(x,INDEX(Table24,,MATCH($F3,:,0)),IFERROR(INDEX(Table24[[name]:[name]],SMALL(IF(G=x,ROW(x)-1,""),COUNTIF($G:G,G))),""))

或者如果你有旧版本的 Excel 使用这个(避免 LET 函数):

=IFERROR(INDEX(Table24[[name]:[name]],SMALL(IF(G=INDEX(Table24,,MATCH($F3,:,0)),ROW(INDEX(Table24,,MATCH($F3,:,0)))-1,""),COUNTIF($G:G,G))),"")