【问题标题】:Transpose a table row by row逐行转置表格
【发布时间】:2021-08-08 09:30:54
【问题描述】:

我需要逐行转置表格的各个部分。以下示例说明了结果的外观:

我尝试了 arrayformula()flatten()transpose() 的不同组合,成功地将最后一列与 =arrayformula(FLATTEN(B4:C)) 对齐,但现在需要帮助解决此问题。

Link to table

【问题讨论】:

    标签: google-sheets transpose flat


    【解决方案1】:

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

    Arrayformula() 可以始终存在于公式的外部,并将应用于整个事物。 它位于示例中名为 MK.Help 的新选项卡上:

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

    【讨论】:

      【解决方案2】:

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

      ={flatten({A2:A,A2:A}),arrayformula(flatten({if(A2:A&lt;&gt;"",B$1,),if(A2:A&lt;&gt;"",C$1,)})),flatten({B2:C})}

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

      ={"A","B","C";flatten({A2:A,A2:A}),arrayformula(flatten({if(A2:A&lt;&gt;"",B$1,),if(A2:A&lt;&gt;"",C$1,)})),flatten({B2:C})}

      新列“C”最终成为混合数据类型,因此如果您对这些结果运行未来的query,请小心,因为它不喜欢混合数据。

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

      ={flatten({A4:A\A4:A})\arrayformula(flatten({if(A4:A&lt;&gt;"";B$3;)\if(A4:A&lt;&gt;"";C$3;)}))\flatten({B4:C})}

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

      ={"A"\"B"\"C";flatten({A4:A\A4:A})\arrayformula(flatten({if(A4:A&lt;&gt;"";B$3;)\if(A4:A&lt;&gt;"";C$3;)}))\flatten({B4:C})}

      如果您想将数组范围限制为特定行而不是向下处理整个工作表(例如第 20 行),则 A4:A 需要为 A4:A20

      【讨论】:

      • 为了让它工作,我不得不编辑你的公式,因为 ={flatten({A2:A4;A2:A4})\arrayformula(flatten({if(A2:A4&lt;&gt;"";B$1;)\if(A2:A4&lt;&gt;"";C$1;)}))\flatten({B2:C4})} 有两个问题: 1. 欧盟版本中的标点符号不同 - , 需要是数组中的反斜杠来分隔公式中的数组项和分号。 2.当我使用例如时,我得到一个#REF!(结果无法扩展,再添加3行)。 A2:A 改为`A2:A4。知道为什么会这样吗?
      • 我已根据您在欧盟位置文件中的初始屏幕截图更新了实施答案。
      猜你喜欢
      • 2019-08-30
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      相关资源
      最近更新 更多