Excel 中使用数组函数创建汇总表的问题

问题描述

我有一个表格,其中一列列出了教师姓名,后面的列是个人培训课程。我们的想法是为每门课程设置一名“首席导师”和三名其他“导师”,这些标签根据选定教师的姓名进行分配。所以它看起来像:

老师 培训1 training2 training3
约翰 首席导师
鲍勃 导师 导师 导师
导师 导师
爱丽丝 导师 首席导师
蒂姆 导师 导师 导师
格斯 首席导师

我试图创建一个单独的汇总表来显示谁被分配到每门课程,例如:

首席导师 导师 导师 导师
培训1 约翰 鲍勃 爱丽丝 蒂姆
培训2 爱丽丝 鲍勃 蒂姆
培训3 格斯 鲍勃 蒂姆

我知道我需要诸如 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 上了解了数组和索引/聚合/匹配,但无法得到我的绕过它......!)

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

提前致谢

解决方法

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

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

为此,我将您的第一个表格转换为涵盖 A1:D7 范围的 Excel 表格 (Table1)。它是您表的精确副本。因此标题是“Teacher”、“Training1”、“Training2”和“Training3”。因此 Table1[Teacher] 等价于 A2:A7。您可以用一种语法代替另一种语法,但使用表格会给您一个动态范围,否则您将不得不创建该范围。

我有你的输出表在 A11:E14 范围内。因此,我在 A12:A14 中有“Training1”、“Training2”和“Training3”。因此,在复制公式时,INDIRECT("Table1["&$A12&"]" 指的是这些名称的表列。该分量在以下公式中占有突出地位。

上面的公式在B12,然后复制到B13:14。观察它对 B11 的引用,它从那里获得“首席导师”。将其对 A12 的引用更改为捕获“Training1”所在的行,该行必须与表中的列标题匹配。

这是单元格 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))

这个公式有一个不规则之处,我决定留给你修正。如您所见,它包含要在表中搜索的单词“Tutor”(与“Lead Tutor”不同)。在我的测试表中,我有 C11:E11 中的单词(从您的表设计中复制),并且应该从那里获取它,就像我在第一个引用 B11 的公式中所做的那样。实际上,它会帮助您理解公式,但如果您设置表格的方式是这样,您可以将“导师”一词替换为 C$11

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

编辑

假设您不想将第一个表转换为表,您可能会通过您分配的名称来引用范围(并在该过程中使其动态化)。创建 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,INDIRECT($A12),0))
[C12] = INDEX(Teachers,SMALL(IF(INDEX(INDIRECT($A12),1)="Tutor",ROW(INDEX(INDIRECT($A12),1))-ROW(INDEX(INDIRECT($A12),COLUMN()-2))
,

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

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

或者如果您有旧版本的 Excel,请使用此功能(避免使用 LET 函数):

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