如何将行转换为列,并重复相邻的单元格?

How do I convert rows to columns, and repeat the adjacent cells?

如果标题令人困惑,我很抱歉,但视觉效果应该会有所帮助:

这是我的 sheet 的样子:

  A B C D
1 x y z t
2 q w e r
3 y u i o

我需要生成一个单独的 sheet 其中:

  A B C
1 x y t
2 x z t
3 q w r
4 q e r
 ...

基本上,我需要将原始 sheet 的中间两列转置,并将其相邻的列也拉到我的新 sheet 中(作为重复行)。

我的转置工作正常,当我拉动相邻的列时也能正常工作。问题是,我无法自动填充 sheet。当我尝试拖动并自动填充时,新的 sheet 将使用第 3 行(与新的 sheet 中的同一行 # 自动填充,而不是使用原始 sheet 中的第 2 行自动填充).

如果这没有道理,请告诉我,我会尽力解释得更好!我不太精通 Google Spreadsheets 脚本 - 我以前尝试过,但它们看起来相当麻烦。但我也很乐意尝试。

我不确定转置运算会在哪里发挥作用,但一些条件数学和 INDEX function¹ 就足够了。

=INDEX($A:$D,(ROW(1:1)-1)/2+1,IF(COLUMN(A:A)=3,4,IF(AND(ISEVEN(ROW(1:1)),COLUMN(A:A)=2),3,COLUMN(A:A))))

我链接到的文档是 Excel,但出于这些目的的语法是相同的。

更多专栏的附录

通过调整第三列之后的偏移条件,可以轻松计算更多列。

=INDEX($A:$J,(ROW(1:1)-1)/2+1,IF(COLUMN(A:A)>=3,COLUMN(A:A)+1,IF(AND(ISEVEN(ROW(1:1)),COLUMN(A:A)=2),3,COLUMN(A:A))))

上面从源矩阵中收集了 10 列,但应该会自动调整几乎任意数量的列。


¹ INDEX function 接受行号和列号参数。虽然通常只使用其中一个,但没有限制针对 2D 单元格范围提供两者。

  • 将 row_number 计算,
    =(ROW(1:1)-1)/2+1
    放入单元格并向下填充。您将收到 1、1、2、2、3、3 等。这提供了 A1:D3 范围内的重复行号。

  • 将 column_number 计算,
    =IF(COLUMN(A:A)=3,4,IF(AND(ISEVEN(ROW(1:1)),COLUMN(A:A)=2),3,COLUMN(A:A)))
    放入一个单元格中,然后向右和向下填充。第一行将收到 1、2、4,第二行将收到 1、3、4。此模式对后续行重复自身并提供 A1:D3 范围内的偏移列号。

您可以使用 3 个动态的单一数组公式来执行此操作,以处理任意数量的数据行:

这里有一张图片来演示:

三个公式为:

CELL A1:

=TRANSPOSE(SPLIT(JOIN(";",ARRAYFORMULA(REPT(Sheet1!A1:A&";",2))),";"))

CELL B1:

=TRANSPOSE(SPLIT(JOIN(";",ARRAYFORMULA(Sheet1!B1:B&";"&Sheet1!C1:C)),";"))

CELL C1:

=TRANSPOSE(SPLIT(JOIN(";",ARRAYFORMULA(REPT(Sheet1!D1:D&";",2))),";"))