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

时间:2016-07-07 18:23:43

标签: excel google-sheets excel-formula spreadsheet

对不起,如果标题令人困惑,但视觉效果应该会有所帮助:

这是我的工作表的样子:

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

我需要生成一个单独的表格,其中:

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

基本上,我需要转换原始工作表的中间两列,并将相邻的列拉入我的新工作表(作为重复行)。

我让转置工作正常,当我拉出相邻的列时也是如此。问题是,我无法自动填写表格。当我试图拖延时自动填充,而不是使用原始工作表中的第2行自动填充,新工作表将使用第3行(在新工作表中与#行相同)自动填充。

如果这没有意义,请告诉我,我会尝试更好地解释!我不太熟悉Google Spreadsheets脚本 - 我之前尝试过,但它们看起来相当麻烦。但我也很乐意尝试这一点。

2 个答案:

答案 0 :(得分:3)

我不确定转置操作会在哪里发挥,但是有点条件数学和INDEX function¹就足够了。

=INDEX($A$1:$D$3,(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))))

index_repeat_gs

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

更多专栏的附录

通过调整第三列之后的偏移条件,可以很容易地考虑更多的列。

=INDEX($A$1:$J$3,(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))))

index_offset_repeat

以上从源矩阵中收集了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范围内的偏移列号。

答案 1 :(得分:0)

您可以使用3个动态的单个数组,以处理任意数量的数据行:

这是一张展示的图片:

enter image description here

这三个公式是:

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))),";"))