在Excel中反向汇总数据

时间:2016-10-24 20:58:29

标签: excel

我的数据如下所示:

Capture1

我想将它转换成这样的东西:

Capture2

我通常会在这种情况下使用VLOOKUP或HLOOKUP,但我有多个用户查看相同的演示文稿,因此这些选项不起作用,因为它们只返回第一个实例而不返回任何后续实例。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

您可以使用countifs()执行此操作,

例如,您可以将转换单元格添加到G2=COUNTIFS($B:$B,$F2,$A:$A,G$1)+COUNTIFS($C:$C,$F2,$A:$A,G$1)+COUNTIFS($D:$D,$F2,$A:$A,G$1)

您需要针对您想要的每一列扩展+countifs(),例如,您的示例中目前有三个,因此需要三个countifs()

结果: image of excel showing countifs()

然后你需要改变这是你想要的话:

(假设“如何在上表中使用excel在单元格G2

=IF(G3=1,G$2,"")

将这样做:

enter image description here

这不是最具扩展性的解决方案(如果您的审稿人数量过多,但无论审稿人姓名的数量如何,它都能正常运作。

此外,=IF(G3=1,G$2,"")可以合并到整个解决方案中,但最好将它展开以显示工作情况。

答案 1 :(得分:1)

使用数组公式可以很容易地完成此操作,如下图所示:

enter image description here

G2中的公式是:

=IFERROR(INDEX($A:$A,SMALL(IF(($B$2:$B$6=$F2)+($C$2:$C$6=$F2)+($D$2:$D$6=$F2),ROW($A$2:$A$6)),G$1)),"")
  

这是一个数组公式,必须用 ctrl + shift + 输入确认!

从那里,你可以随处复制它;)

答案 2 :(得分:1)

你也可以尝试这个数组公式:可以扩展到任意数量的列: -

=IFERROR(INDEX($A:$A,SMALL(IF($B$2:$D$4=$F2,ROW($B$2:$D$4)),COLUMNS($A:A))),"")

假设原始列表在A1中开始,新列表在F1中开始。

必须使用 Ctrl Shift 输入

这个想法是IF语句建立了一个TRUE和FALSE的二维数组,例如:对于鲍勃: -

TRUE  FALSE FALSE
TRUE  FALSE FALSE 
FALSE FALSE FALSE

如果结果为true,则从IF语句的第二部分获取相应的行号: -

2
3
4

2      FALSE FALSE
3      FALSE FALSE
FALSE  FALSE FALSE

关于使用IF语句的要点是当条件不为真时它给出FALSE,这被SMALL函数忽略 - 如果你只是将这些值相乘,你会得到一些零,数组中的最小值会总是零。

然后它所要做的就是使用SMALL和列($ A:A)选择这些元素的最小,第二小等等 - 这从1开始并在拉过时等到2,3等。

结果用作A列的索引以进行演示。当公式被拉过时,它会给出下一个演示文稿,直到它出错并显示一个空单元格。

enter image description here