如何反转所选行的顺序?


33

是否有一种简单的方法可以反转所选行的顺序?(或者,如果更简单,那么所有行如何。)

具体来说,在这种情况下,没有可用于排序以使其按正确顺序排列的列。那么,给定一排任意顺序的行,是否可以颠倒该顺序?

举个例子...

在此处输入图片说明

...在反转这5行后,“ Waitrose 756”应排在最前面,“ Moot”应排在最后。


“没有可用于排序的列”为什么不只是添加一个具有升序值(1、2、3,...)的列,对该列进行降序排序,然后将其删除?
帕特里克

这是一个非常常见的请求,因为这么多的人开始为电子表格开始时为每个条目添加一行,然后在底部添加新行,然后在意识到100行之后,他们希望将其反转以在顶部添加行,因为这需要花费WAY每次要添加新数据时,都有太多时间找不到最底部的非空白行。不幸的是AFAIK无法做到这一点,如果您希望公式和格式在反转后保持不变,那是没有办法的。
Phil Goetz

Answers:


24

要反转选定范围的顺序(与按特定列排序相反),可以使用以下脚本:

function reverseOrder()
{
  var range = SpreadsheetApp.getActiveRange();
  var values = range.getValues();
  range.setValues(values.reverse());
}

添加此onOpen脚本将创建一个名为Extra的菜单项,其中包含一个名为Reverse的项:

function onOpen ()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menu = [{name: "Reverse", functionName: "reverseOrder"}];
  ss.addMenu("Extra", menu);
}

3
谢谢。我花了一点时间弄清楚如何添加这些内容,以便菜单项出现(工具->脚本管理器...),但是一旦完成,它就可以工作了!
Jonik

@AdamL,我们如何不编写脚本就能做到这一点?
Pacerier,2014年

1
@AdamL:非常适合移动文本,但是不能移动单元格背景色等。如何扩展脚本来执行此操作?
Gruber

1
@Pacerier:非常抱歉对较晚的答复,但一种解决方案是使用一个助手列,其编号以升序排列,并按该列的降序对范围进行排序(然后可以删除助手值)。
AdamL '16

@Gruber:第一个选择是脚本一次复制/粘贴一个单元格;第二种选择是获取范围所需的所有格式,也将它们反转并设置。我会说第一个选择对于小范围可能是好的,但对于大范围却很糟糕。第二种选择是涵盖所有用例的最佳选择。
AdamL '16

21

这是一个无需使用脚本即可执行此操作的示例-请注意,此方法假定您的数据只是数据-如果您有引用相同范围内其他单元格的公式,则可能会发生奇怪的事情:

  1. 插入一个新列(为方便起见,我们将其称为列A)。
  2. 在A1中,输入值[1]。(您可以从A10开始,如果只想对范围进行排序,则可以从A50开始)
  3. 在A2中,输入公式[= A1 + 1]。(调整您是否没有在步骤2中从A1开始)
  4. 将A2中的公式扩展到要反转的数据的底部。

    现在,所有内容都应从1到要排序范围的行数进行编号。

  5. 选择您已设置范围内的所有行。
  6. 单击“数据”菜单,然后选择“按A,Z-> A列排序范围”。

现在,您的数据应该被颠倒了。由于我们设置编号公式的方式,该编号将被重置,并且仍然从顶部的1开始...,但是其他列中的实际数据应该全部颠倒。


2
这太容易了,以至于我不得不不顾自己的脑袋sm一下。很棒的答案。+1。
GroggyOtter

2
对于步骤2-4,您甚至不需要公式。只需在A1中输入1,在A2中输入2,选择两者并将其向下拖动即可。
帕特里克

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.