我遇到了从表中获取报告的问题,看起来像这样:
C1| C2 | C3 | C4
A | 2015-05-15 | 34 | 4
A | 2015-03-12 | -4 | 5
A | 2014-03-12 | 24 | 8
B | 2015-11-10 | -4 | 5
B | 2015-06-12 | 3 | 5
C | 2013-05-12 | 3 | 5
...
600+ rows
...
所以我需要通过第一列中的值对不同的值列(C3和C4)进行分组。在通常的情况下,可以通过分离表来实现这样的表(例如对于col3):
A | B | C | ....
34 | -4 | 3 | ....
-4 | 3 | | ....
24 | | | ....
对于col4,我需要一个具有相似布局的表。简而言之,我需要制作一些关键表,而不是每个术语的值聚合。是否有可能用原始表格获得这样的小桌子?如果您可以为原始数据提供一些其他布局,这些布局将更适合(并且更容易,对于此标准的excel函数更为理想),可以免费提供 - 使用一些Python脚本我可以重新保存它。
答案 0 :(得分:0)
首先,我假设C1,C2,C3,C4
是A1:D1中的列标题,数据是A2:D1000
C3,C3,C3
A,B,C
C4,C4,C4
A,B,C
在F3中放置以下数组公式:
=IFERROR(INDEX(OFFSET($A$2:$A$1000,0,MATCH(F$1,$A$1:$D$1,0)-1),SMALL(IF($A$2:$A$1000=F$2,ROW($A$2:$A$1000)-ROW(A$2)+1),ROWS(F$2:F2))),"")
不要忘记使用 Ctrl + Shift + 输入使其成为数组公式而不是仅使用输入作为正常公式。
将F3复制到F4:F7,G3:H7和J3:L7
你最终会看到这样的东西:
| A B C D E F G H I J K L
----|--------------------------------------------------------------------
1 | C1 C2 C3 C4 C3 C3 C3 C4 C4 C4
2 | A 15/05/2015 34 4 A B C A B C
3 | A 12/03/2015 -4 5 34 -4 3 4 5 5
4 | A 12/03/2014 24 8 -4 3 5 5
5 | B 10/11/2015 -4 5 24 8
6 | B 12/06/2015 3 5
7 | C 12/05/2013 3 5
在F3中分解公式:
=IFERROR(INDEX(source column,SMALL(filtered row numbers,ranking)),"")
其中:
OFFSET($A$2:$A$1000,0,MATCH(F$1,$A$1:$D$1,0)-1)
IF($A$2:$A$1000=F$2,row numbers)
ROW($A$2:$A$1000)-ROW(A$2)+1
ROWS(F$2:F2)
公式如何运作是一个多部分的解释:
IFERROR(formula,"")
如果嵌入式公式产生错误,那么我们会显示一个空单元格。这很有用,因为我们不知道会得到多少结果。INDEX(range,row)
获取我们想要查看的行中的值。此处的行号是根据数据是否符合条件动态生成的。SMALL(array,k)
提取数组中的第k个最小值。数组是过滤值。 k只是一个数字,取决于我们将公式放入F中的哪一行。IF(criteria,value)
根据标准生成值或FALSE。ROW(cell)
单元格的行号ROWS(range)
范围的大小所以在数组公式中:
ROW($A$2:$A$1000)-ROW(A$2)+1
是从1 IF($A$2:$A$1000=F$2,ROW($A$2:$A$1000)-ROW(A$2)+1)
是仅列出符合条件SMALL
获取过滤后的列表并返回第k个最小的过滤行号,这意味着F3获得第一个,F4获得第二个,等等。INDEX
抓取该行号的数据并显示我从http://www.exceltactics.com/make-filtered-list-sub-arrays-excel-using-small/得到了这个想法,在那个页面上是一个非常好的解释,它是如何工作的。
答案 1 :(得分:0)
找到一个简单的解决方案:只需下载工具Tableau。它可以根据原始数据创建非常灵活的图形,可以自由地将任何列作为行,反之亦然,也可以进行摸索。