AndrewH Asked: 2024-02-17 06:04:47 +0800 CST2024-02-17 06:04:47 +0800 CST 2024-02-17 06:04:47 +0800 CST Excel 复制每 10 行数据,然后倒序排列 772 我有一系列数字 1 到 20。如何才能使该系列的前 10 行按顺序排列,然后接下来的 10 行按相反顺序排列 1-10。然后每 10 行数据执行一次。 microsoft-excel 3 个回答 Voted Best Answer Mayukh Bhattacharya 2024-02-17T15:21:41+08:002024-02-17T15:21:41+08:00 有很多方法可以解决这个问题,但是就可读性而言,可以使用以下方法。下面显示的公式不需要递归LAMBDA()辅助函数,而且它非常简洁,并且根据OP 中给定的数据运行良好。那是说: • 单元格中使用的公式D1 =LET(α, WRAPCOLS(B1:B20,10), TOCOL(VSTACK(α,SORT(α,,-1)),2,1)) 或者,以下内容比上面的内容更加动态,因为如果您有多个20行,然后使用按降序对SORT()每个索引列进行排序。最后与VSTACK()原始数组一起TOCOL()转换为单个数组。请注意,在按列扫描时,使用2和1 where2 会忽略错误。我用过,不一定是偶数行,可以是奇数行。12 =LET(α, WRAPCOLS(B1:B50,10), TOCOL(VSTACK(α,SORT(α,SEQUENCE(,COLUMNS(α)),-1)),2,1)) 使用将一维WRAPCOLS()数组转换为二维数组。 使用SORT()函数按降序排序。 使用将原始数组VSTACK() 附加到排序后的数组。 使用TOCOL()将数组转换为单列。 注意: 给定的公式与 OP 中发布的一系列数字配合良好。如果还有其他的情况,那么这可能需要一些改变。 另一种替代方法: =LET( α, WRAPCOLS(B1:B20,10), TOCOL(VSTACK(α, CHOOSEROWS(α, SEQUENCE(ROWS(α),,10,-1))),2,1)) 上面发布的公式应该适用于所有场景,因为它SORT()不像第一种方法那样依赖于函数。 Scott Craner 2024-02-17T06:52:44+08:002024-02-17T06:52:44+08:00 这将创建一个行号数组,然后 INDEX 返回该行的值: =LET( z,A1:A20, x,SEQUENCE(10), y,VSTACK(x,10-x+1), g,DROP(REDUCE(0,SEQUENCE(ROWS(z)/10,,0),LAMBDA(r,t,VSTACK(r,y+10*t))),1), INDEX(z,g)) z 是值的范围 x 创建一个从 1 到 10 的序列 y 将 x 堆叠在逆元之上(10 比 1) g 在其底部添加下一个分组,这是可扩展的,因为它找到 Z 中的条目数并将其除以 10。 然后我们使用 INDEX 返回组中相对行号的值。 P.b 2024-02-17T22:30:50+08:002024-02-17T22:30:50+08:00 另一种方式可能是 =LET(a,SEQUENCE(10), x,VSTACK(a,SORT(a,,-1)), VSTACK(x,x+10)) 您还可以将其与索引结合起来 =LET(x,SEQUENCE(10),y,VSTACK(x,SORT(x,,-1)),INDEX(B1:B20,VSTACK(y,y+10)))
有很多方法可以解决这个问题,但是就可读性而言,可以使用以下方法。下面显示的公式不需要递归
LAMBDA()
辅助函数,而且它非常简洁,并且根据OP 中给定的数据运行良好。那是说:• 单元格中使用的公式D1
或者,以下内容比上面的内容更加动态,因为如果您有多个
20
行,然后使用按降序对SORT()
每个索引列进行排序。最后与VSTACK()
原始数组一起TOCOL()
转换为单个数组。请注意,在按列扫描时,使用2
和1
where2
会忽略错误。我用过,不一定是偶数行,可以是奇数行。1
2
WRAPCOLS()
数组转换为二维数组。SORT()
函数按降序排序。VSTACK()
附加到排序后的数组。TOCOL()
将数组转换为单列。注意: 给定的公式与 OP 中发布的一系列数字配合良好。如果还有其他的情况,那么这可能需要一些改变。
另一种替代方法:
上面发布的公式应该适用于所有场景,因为它
SORT()
不像第一种方法那样依赖于函数。这将创建一个行号数组,然后 INDEX 返回该行的值:
另一种方式可能是
您还可以将其与索引结合起来
=LET(x,SEQUENCE(10),y,VSTACK(x,SORT(x,,-1)),INDEX(B1:B20,VSTACK(y,y+10)))