文章

Google 表格公式 - 反转数组

本文介绍如何反转数组

Google 表格公式 - 反转数组

官方提供的函数中貌似没有一个专门反转数组的函数,所以这里手动实现了一下,记录一下实现的思路。

样表如下,

 ABCDEF
1531534   
27234   
322365   
42767   
565552   
686765   

首先,先在 E1 输入公式 =ROWS(A1:C6) 记录范围的行数,在 E2 输入公式 =COLUMNS(A1:C6) 记录范围的列数。

反转单列

先尝试反转 A1:A6 这一单列。主要思路是让第一个单元格的值变成第六个单元格的值,第二个单元格的值变成第五个单元格的值,以此类推。也就是实现一个

  • 1 -> 6
  • 2 -> 5
  • 3 -> 4
  • 4 -> 3
  • 5 -> 2
  • 6 -> 1

的映射。该映射可以通过 size-i+1 来实现,其中 size 是列的长度,i 是每一个值的索引。此例中 size 是 6,当 i 为 3 时,6-3+1 是 4,其他同理。

有了这个索引的映射,我们就可以通过 INDEX 函数来将索引转成值了。再加上 MAP 函数,就可以反转单列了。

F1 输入公式 =MAP(SEQUENCE(E1, 1, 1, 1), LAMBDA(x, INDEX(A1:A6, E1-x+1, 1)))

 ABCDEF
1531534 6867
27234 365
322365  2
42767  22
565552  7
686765  53

按行反转

上例中我们只反转了单列,如果我们想把 A1:C6 这个范围按照行来反转呢,比如,第一行变第六行,第二行变第五行等等。

我们用一个新函数 CHOOSEROWS。该函数可以在一定范围内按照行索引选择多个行并重组,具体可以查看官方文档

此处我们把 F1 的公式换为 =MAP(SEQUENCE(E1, 1, 1, 1), LAMBDA(x, CHOOSEROWS(A1:C6, E1-x+1)))

 ABCDEFGH
1531534 686765
27234 365552
322365  2767
42767  22365
565552  7234
686765  531534

但是因为 CHOOSEROWS 这个函数也支持传入数组作为参数,因此我们可以传入形如 {6,5,4,3,2,1} 这样的数组来反转行。

因此把 F1 的公式换为 =CHOOSEROWS(A1:C6, SEQUENCE(E1, 1, E1, -1)) 可以得到同样的效果。

实际上,单列也可以使用 CHOOSEROWS,所以 =CHOOSEROWS(A1:A6, SEQUENCE(E1, 1, E1, -1)) 可以更简洁地反转单列。

实际上,更加推荐使用 CHOOSEROWSSEQUENCE 来反转,因为更加简洁。

行列全反转

按列反转的思路跟按行反转类似,只不过函数换为 CHOOSECOLS 以及 SEQUENCE 要生成的是一行数据而不是一列数据。

所以,如果要同时把行和列都反转,我们可以把 F1 的公式换为

=CHOOSECOLS(CHOOSEROWS(A1:C6, SEQUENCE(E1, 1, E1, -1)), SEQUENCE(1, E2, E2, -1))

 ABCDEFGH
1531534 656867
27234 352565
322365  7762
42767  65322
565552  3427
686765  534153

其实就是先反转每一行,再反转每一列。

本文由作者按照 CC BY 4.0 进行授权