逐行转置 table

Transpose a table row by row

我需要逐行转置 table 的部分内容。以下示例说明了结果需要的样子:

我尝试了 arrayformula()flatten()transpose() 的不同组合,成功地使用 =arrayformula(FLATTEN(B4:C)) 使最后一列正确,但现在需要帮助来解决这个问题。

Link to table

在示例屏幕截图的第 2 行试试这个:

={flatten({A2:A,A2:A}),arrayformula(flatten({if(A2:A<>"",B,),if(A2:A<>"",C,)})),flatten({B2:C})}

或者,如果您需要列标题,请将其放在第 1 行:

={"A","B","C";flatten({A2:A,A2:A}),arrayformula(flatten({if(A2:A<>"",B,),if(A2:A<>"",C,)})),flatten({B2:C})}

新列 'C' 最终成为混合数据类型,因此如果您 运行 对这些结果进行未来 query 操作时要小心,因为它不喜欢混合数据。

对于本地实现(根据您的初始屏幕截图,欧盟区域设置文件),在单元格 E4 中尝试此操作 - 因为公式位于第 4 行,数组范围需要从 4 (A4:A):

={flatten({A4:A\A4:A})\arrayformula(flatten({if(A4:A<>"";B;)\if(A4:A<>"";C;)}))\flatten({B4:C})}

或者,如果您想要列标题,请在单元格 E3 中尝试此操作 - 数组范围仍然是 A4:A 因为 "A"\"B"\"C";第 3 行中的标题,; 是 return,则公式的其余部分针对第 4 行以下的数据:

={"A"\"B"\"C";flatten({A4:A\A4:A})\arrayformula(flatten({if(A4:A<>"";B;)\if(A4:A<>"";C;)}))\flatten({B4:C})}

如果您想将数组范围限制在特定行而不是计算整个 sheet(例如第 20 行),则 A4:A 需要 A4:A20 .

这是一个基本的 SPLIT(FLATTEN( 问题。

Arrayformula() 可以始终存在于公式的外部,并将应用于整个公式。 这是在您的示例中名为 MK.Help:

的新选项卡上
=ARRAYFORMULA(QUERY(TO_TEXT(SPLIT(FLATTEN(Data!A2:A&"|"&Data!B1:C1&"|"&Data!B2:C);"|";0;0));"where Col1<>''"))