如何将行转换为列,并重复相邻的单元格?
如果标题混淆,我很抱歉,但视觉应该有所帮助:
以下是我的工作表的样子:
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))))
我链接到的文档是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))))
上面收集源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))),";"))