如何将行转换为列,并重复相邻的单元格?
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))),";"))
如果标题令人困惑,我很抱歉,但视觉效果应该会有所帮助:
这是我的 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))),";"))