excel 对于第二行中的每第10个观测,将数据从两列转置到行

2sbarzqh  于 2023-04-22  发布在  其他
关注(0)|答案(4)|浏览(150)

我有一个数据,其中第一列是元数据属性,第二列是每个属性的值(每个属性只有这10个属性)。我想做的是转置这个数据,使10个元数据属性是列,每个属性的观察值都是行。我知道这听起来很简单,但我不知道如何简单地做到这一点
| 元数据|意见|
| --------------|--------------|
| M1|一比一|
| M2|1-2|
| M3|1-3|
| M4|1-4|
| M5|1至5个|
| M6|1-6|
| M7|1-7|
| M8|1-8|
| M9|1至9|
| M10|1-10|
| M1|2-1|
| M2|二比二|
| M3|二三|
| ……|……|
我想转置数据,使第1列中的元数据是标题名称,第2列中的观察结果是行
| M1|M2|M3|M4|M5|……|
| --------------|--------------|--------------|--------------|--------------|--------------|
| 1-1 |1-2|1-3|1-4|1至5个|……|
| 2-1 |二比二|二三|2-4|2-5|……|
在Excel中,我可以做一些类似于...

=TRANSPOSE(A1:A10)
=TRANSPOSE(B1:B10)
=TRANSPOSE(B11:B20)
...

但是必须有一个更简单的方法来转置b列中的观测值

jhiyze9q

jhiyze9q1#

此公式不关心元数据的可用性。它是动态的,将根据元数据的唯一列表增加或减少列数。
它也不依赖于排序顺序。

=LET(
    fclm,A2:A14,
    sclm,B2:B14,
    lbl,UNIQUE(fclm),
    MAKEARRAY(
        MAX(BYROW(lbl,LAMBDA(z,COUNTA(FILTER(fclm,fclm=z)))))+1,
        ROWS(lbl),
        LAMBDA(y,x,IF(y=1,INDEX(lbl,x),IFERROR(INDEX(FILTER(sclm,fclm=INDEX(lbl,x)),y-1),"")))))

未分类:

删除M10:

f1tvaqid

f1tvaqid2#

像这样的?

=LET(A,A2:A21, B,B2:B21, ux,UNIQUE(A), wrap,WRAPROWS(B,10),VSTACK(TOROW(ux),wrap))

下面是输出:

fnx2tebb

fnx2tebb3#

使用=TRANSPOSE(A2:A11)获取header,使用=WRAPROWS(B2:B26,10,"")转置B列:

8cdiaqws

8cdiaqws4#

尝试:

=VSTACK(TOROW(UNIQUE(A2:A14)),WRAPROWS(B2:B14,10,""))

不确定您的Excel版本,但如果您使用MS365,则上面的版本将工作,如果不尝试下面的版本:

·单元格D10中使用的公式--〉向右填充

=IFERROR(INDEX($A$2:$A$14,MATCH(0,COUNTIF($C10:C10,$A$2:$A$14),0)),"")

·单元格D11中使用的公式--〉向下填充和向右填充

=IFERROR(INDEX($B$2:$B$14,AGGREGATE(15,7,(ROW($B$2:$B$14)-ROW($B$2)+1)/(D$10=$A$2:$A$14),ROW(A1))),"")

**注意:**如果您不是MS365用户并使用第二个公式替代方案,则可能需要在退出编辑模式时按CTRL+SHIFT+ENTER。

另一种方法是使用LET()并将整个数据定义为x

=LET(x,A2:B14,
y,TOROW(UNIQUE(INDEX(x,,1))),
z,WRAPROWS(INDEX(x,,2),10,""),
VSTACK(y,z))

相关问题