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

如果标题混淆,我很抱歉,但视觉应该有所帮助:

以下是我的工作表的样子:

ABCD 1 xyzt 2 qwer 3 yuio 

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

  ABC 1 xyt 2 xzt 3 qwr 4 qer ... 

基本上,我需要将原始表格的中间两列进行转置,并将其相邻的列拉到我的新表格中(如重复行)。

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

请让我知道,如果这是没有意义的,我会尽力解释更好! 我不是很了解Google Spreadsheets脚本 – 我已经尝试过,但是看起来相当麻烦。 但我很高兴尝试。

我不确定转置操作将在哪里发挥作用,但有一点条件math和INDEX函数 ¹应该足够了。

 =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

上面收集源matrix的10列,但应该自动调整任何数量的列。


¹INDEX function接受行号和列号的参数。 尽pipe通常只使用其中的一种,但是对二维范围的单元不提供限制。

  • 把row_number计算,
    =(ROW(1:1)-1)/2+1
    进入一个单元格,并填写下来。 您将收到1,1,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个单dynamic数组来做到这一点,它们是dynamic的,可以处理任意数量的数据行:

这里是一个图像来演示:

在这里输入图像说明

这三个公式是:

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