在Google电子表格中将数据行转置为对角线

时间:2017-01-19 20:14:31

标签: arrays google-sheets transpose diagonal

我试图找到一个Google Spreadsheet公式,它会将5列数组的行转换为对角线,就像这样(假设数据在例如A1:E20中)

A1

A2 B1

A3 B2 C1

A4 B3 C2 D1

A5 B4 C3 D2 E1

A6 B5 C4 D3 E2

A7 B6 C5 D4 E3 ...

我找到了相反问题的解决方案(从对角线到行或列 - 非常感谢帮助)但不是这个问题。

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

编辑:

我删除了旧评论,因为我误解了你的问题。以下代码适用于您只需拖动到大小的所有单元格。该代码假定一行和一列为11的起始行,但可以调整为任何值。

=if((row()-(column()-11))>0,indirect(char(column()-10+64)&row()-(column()-11)),"")

编辑2:

因此,为了使其完全可变,您只需要知道原始数据的左上角单元格与新块的左上角单元格之间的距离。让我们调用列数差异" dx"行数差异" dy"

=if(((row()-dy)-(column()-dx))>0,indirect(char(column()-dx+65)&(row()-dy)-(column()-dx)),"")

只需用数字或单元格引用替换dX和dy,然后关闭即可!

编辑3:

我承诺的最后一个,这一个修复了顶行的空白单元格(虽然我只得到一个)

=if(((row()-dy+1)-(column()-dx))>0,indirect(char(column()-dx+64)&(row()-dy+1)-(column()-dx)),"")

答案 1 :(得分:0)

这是另一种可以追溯到原帖的方式

=iferror(if(columns($A1:A1)>rows(A$1:A1),"",index(A$1:A$5,rows(A$1:A1)-columns($A1:A1)+1)),"")

enter image description here

答案 2 :(得分:0)

这是该任务的ARRAYFORMULA。唯一的参数是易于更改的范围本身(A1:E20)。

将其放置在一个单元格中:

=ARRAYFORMULA(
  IFNA(
    VLOOKUP(
      SEQUENCE(ROWS(A1:E20) + COLUMNS(A1:E20) - 1) - (COLUMN(A1:E20) - 1),
      {ROW(A1:E20), A1:E20},
      SEQUENCE(1, COLUMNS(A1:E20), 2, 1),
      0
    )
  )
)

enter image description here