我想知道是否可以使用分组的重复字段转置列,例如:
+---------+------+
| field_1 | 1 |
| field_2 | 2 |
| field_3 | 3 |
| field_4 | 4 |
| field_1 | 5 |
| field_2 | 6 |
| field_3 | 7 |
| field_4 | 8 |
| field_1 | 9 |
| field_2 | 10 |
| field_3 | 11 |
| field_4 | 12 |
+---------+------+
到唯一列,如下所示:
+---------+---------+---------+---------+
| field_1 | field_2 | field_3 | field_4 |
+---------+---------+---------+---------+
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 |
+---------+---------+---------+---------+
这可能没有脚本吗?
答案 0 :(得分:5)
在E3中输入以下公式(使用Ctrl + Shift + Enter)然后填写然后再填充。
=OFFSET($C$1,LARGE((ROW($B$2:$B$13)-1)*($B$2:$B$13=E$2),ROW()-2),0) & ""
值不在列出的顺序中,但至少在正确的列中。
将尝试解释:
采取" field_1"例如,(ROW($B$2:$B$13)-1)*($B$2:$B$13=E$2)
将返回一个行号数组乘以1(TRUE)或零(FALSE),具体取决于" B"单元格值匹配" field_1" (来自E2)。 -1
是一个调整,因为我们从第2行开始。返回的数组如下所示:
[1,0,0,0,5,0,0,0,9,0,0,0]
鉴于该数组,我们需要找到一种方法来逐一获取非零值:我们可以使用LARGE()来做到这一点,使用ROW()-2
将第二个参数递增到LARGE (-2因为我们希望第二个参数从1开始,公式在第3行输入)。这给了我们一个有序的值数组:
[9,5,1,0,0,0,0,0,0,0,0,0]
我们将这个有序数组作为"行偏移" OFFSET()的参数,从C2开始倒计时:所有非零值都给出了我们想要的Col C值,而所有零值只返回C2(它是空的,并且显示为0
而没有最后& ""
公式中的所有单元格引用都在需要的地方使用$,以便在拖动时根据需要进行调整以填充/跨越
答案 1 :(得分:1)
答案 2 :(得分:0)
我的答案与蒂姆非常相似,但避免了CSE部分并将其内化到AGGREGATE函数中。还要相信它会保留B中元素出现的垂直顺序(尽管未经过测试)。
在D1中使用以下公式并向右复制以获取唯一的标题列表。
=INDEX($A$1:$A$12,MATCH(0,INDEX(COUNTIF($C1:C1,$A$1:$A$12),0,0),0))
然后在D2中使用以下内容从列B中提取信息。可以向右和向下复制。如果找不到某个项目,则会显示未找到该项目。你可以改成这个""如果你愿意的话。
=IFERROR(INDEX($B$1:$B$12,AGGREGATE(15,6,ROW($A$1:$A$12)/($A$1:$A$12=D$1),ROW(1:1))),"Not found")
概念证明
关于OFFSET的注释
OFFSET是一个易失性函数,意味着它会随时重新计算工作表上的任何内容,而不仅仅是它所使用的单元格。因此,如果你只使用它几次,没什么大不了的。但是,如果您反复使用它,您的工作表可能会变慢。