想到这个问题,是因为工作中有张 Excel 表本来是时间从大到小排列的,现在要和其它表数据合并,需要把时间从小到大排列。这件事也具有一定的普遍性,就是把原先的数据逆序放置,我把我的方法总结一下。
本来指望 Excel 有个类似“Paste in Reverse Order”的命令,但是没有找到,只有转置粘贴(Transpose),不能实现我的要求。我还是选择用公式来解决这个问题。
请看示例数据:
A | B | C | D | E | F | |
1 | 时间 | 问题提交数 | 问题解决数 | 时间 | 问题提交数 | 问题解决数 |
2 | 2008-6-8 | 81 | 12 | 2008-6-1 | 31 | 7 |
3 | 2008-6-7 | 56 | 17 | 2008-6-2 | 334 | 298 |
4 | 2008-6-6 | 325 | 315 | 2008-6-3 | 303 | 280 |
5 | 2008-6-5 | 219 | 187 | 2008-6-4 | 215 | 190 |
6 | 2008-6-4 | 215 | 190 | 2008-6-5 | 219 | 187 |
7 | 2008-6-3 | 303 | 280 | 2008-6-6 | 325 | 315 |
8 | 2008-6-2 | 334 | 298 | 2008-6-7 | 56 | 17 |
9 | 2008-6-1 | 31 | 7 | 2008-6-8 | 81 | 12 |
10 |
A2:C9 是原始数据,D2:F9 是期望的结果。
我先讲一下在 D 栏中如何逆序放置 A 栏的数据,再讲整个 A2:C9 如何逆序放置在 D2:F9 中。
在 D2 输入公式 =OFFSET($A$2,ROWS(A2:$A$9)-1,0), 然后双击填充柄,自动应用到 D3:D9 的区域,可以看到 D3 中的公式是 =OFFSET($A$2,ROWS(A3:$A$9)-1,0); D9 中的公式是 =OFFSET($A$2,ROWS(A9:$A$9)-1,0)。
D 栏里要逆序放置 A 栏的数据,A9 放在 D2,A8放在 D3,如此类推,A2 放在 D9。我设计的公式,以 A2 为参考点,为了保证公式自动填充时这个基准点不会变化,用的是绝对引用 $A$2。 ROWS(A2:$A$9)-1 计算出要取值的单元格和参照点之间的距离(行数)。最后,用 Offset 函数返回要取值的单元格。
对于整个 A2:C9 区域的逆序放置, 我们不必把上面的公式在 E 栏和 F 栏分别输入一遍。Offset 函数本身就可以返回一个区域的。选择 D2:F2,在公示栏里输入 =OFFSET($A$2:$C$2,ROWS(A2:$A$9)-1,0), 按 Ctrl+Shift+Enter 输入,D2:F2 就全部填充了,然后双击填充柄,自动应用到 D2:F9 整个区域。