在谷歌电子表格中,将数据行转为对角线。

问题描述 投票:1回答:3

我试图找到一个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
...

我已经找到了相反问题的解决方案(从对角线到行或列--很多人帮助我),但没有找到这个问题的解决方案。

非常感谢您的帮助

arrays google-sheets google-sheets-formula transpose diagonal
3个回答
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


0
投票

编辑,我删除了我的旧评论,因为我看错了你的问题。

我删除了我的旧评论 因为我误读了你的问题。下面的代码适用于所有单元格,你只需要拖动到大小就可以了。该代码假设起始行为1,列为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)),"")

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

© www.soinside.com 2019 - 2024. All rights reserved.