一列数据,如果需要对其进行首尾倒置的逆向排序,大家可以想到几种方法?
需求:
将 A 列的数据首尾倒置排序
解决方案 1:排序法
1. 在 B 列顺序填充 1 到 9 的自然数
2. 选中 A、B 两列,选择菜单栏的“数据”-->“排序”
3. 在弹出的对话框中,“主要关键字”选“列 B”,“次序”选“降序”--> 确定
4. 即已排好
解决方案 2:公式法
本例中,我提供两种公式:
- =OFFSET(A1,COUNTA($A1:$A$9)-ROW(),)
- =OFFSET($A$1,COUNTA($A$1:$A$9)-ROW(),)
公式释义:
乍一看,两个公式非常接近,唯一的区别在于 A1 的行值固定和不固定。我们依次来解释一下:
- OFFSET 函数用于返回对单元格或单元格区域中指定行数和列数的区域的引用
- 语法结构为:=OFFSET(基准位置,向下或上偏移几行,向右或左偏移几列,引用区域的高度,引用区域的宽度)
1. 先来分解 B 列的公式:
- OFFSET(A1,COUNTA($A1:$A$9)-ROW(),):以 A1 为基准位置,向下偏移一定的行数,不需要向右偏移,所以第二个参数留空
- COUNTA($A1:$A$9)-ROW():向下偏移的行数为 $A1 至 $A$9 的总数(即 9),减去当前行数
- B1 的偏移行数为 9-1=8;A1 向下 8 行,就是 A9
- 拖动公式到 B2 时,A1 自动变成了 A2,即以 A2 为基准向下偏移;偏移的行数为 COUNTA($A2:$A$9)-ROW(),即 8-2=6;A2 向下 6 行,就是 A8
- 依次类推,实现倒置
2. 再来分解 C 列的公式:
- OFFSET($A$1,COUNTA($A$1:$A$9)-ROW(),):依然是向下偏移,但是始终以 $A$1 为基准位置
- COUNTA($A$1:$A$9)-ROW():向下偏移的行数为 $A$1 至 $A$9 的总数(即 9,因为用 $ 固定了区域,所以这个总数始终不变),减去当前行数
- B1 的偏移行数为 9-1=8;$A$1 向下 8 行,就是 A9;
- 拖动公式到 B2 时,仍以 $A$1 为基准向下偏移;偏移的行数为 COUNTA($A$1:$A$9)-ROW(),即 9-2=7;$A$1 向下 7 行,就是 A8
- 依次类推,实现倒置