¿Cómo invertir el orden de las filas seleccionadas?

33

¿Hay una manera fácil de invertir el orden de las filas seleccionadas ? (O qué tal todas las filas , si eso es más fácil).

Específicamente, en este caso, no hay una columna que se pueda usar para ordenarlos para ordenarlos correctamente. Entonces, dado un montón de filas en un orden arbitrario, ¿es posible revertir ese orden?

Como ejemplo...

ingrese la descripción de la imagen aquí

... después de la inversión de estas 5 filas, "Waitrose 756" debería aparecer primero y "Moot" al final.

Jonik
fuente
"no hay columna que pueda usarse para ordenar" ¿Por qué no agregar una columna con valores ascendentes (1, 2, 3, ...), ordenar descendentemente en esa columna y luego eliminarla?
Patrick
Esta es una solicitud muy común, porque muchas personas comienzan una hoja de cálculo con una fila para cada entrada, agregando nuevas filas en la parte inferior, y luego, después de 100 filas, se dan cuenta de que quieren invertirla para agregar filas en la parte superior, porque toma WAY demasiado tiempo para encontrar la fila inferior no en blanco cada vez que desea agregar una nueva pieza de datos. Desafortunadamente AFAIK no hay forma de hacerlo, no si quieres que tus fórmulas y formato permanezcan igual después de la inversión.
Phil Goetz

Respuestas:

24

Para invertir el orden del rango seleccionado (en lugar de ordenar por una columna específica), puede usar el siguiente script:

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

Agregar este script onOpen creará un elemento de menú llamado Extra , que contiene un elemento llamado Reverse :

function onOpen ()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menu = [{name: "Reverse", functionName: "reverseOrder"}];
  ss.addMenu("Extra", menu);
}
AdamL
fuente
3
Gracias. Me tomó un momento descubrir cómo agregarlos para que aparezca el elemento del menú (Herramientas -> Administrador de secuencias de comandos ...), pero una vez que lo hice, ¡funciona!
Jonik
@ Adam, ¿cómo podemos hacer esto sin secuencias de comandos?
Pacerier
1
@AdamL: Excelente para mover texto, pero no puede mover el color de fondo de la celda, etc. ¿Cómo se puede extender el script para realizar esto también?
Gruber
1
@Pacerier: disculpas por la respuesta extraordinariamente tardía, pero una solución sería con una columna auxiliar con números en orden ascendente, y ordenar el rango por esa columna descendente (y luego puede eliminar los valores auxiliares).
AdamL
@Gruber: la primera opción sería que el script copie / pegue una celda a la vez; la segunda opción sería obtener todos los formatos requeridos para el rango, invertirlos también y configurarlos. Yo diría que la primera opción podría estar bien para rangos pequeños, pero terrible para rangos grandes; La segunda opción sería la mejor apuesta para cubrir todos los casos de uso.
AdamL
21

Aquí hay un ejemplo de cómo hacer esto sin usar scripts: tenga en cuenta que este método asume que sus datos son solo datos; puede hacer cosas extrañas si tiene fórmulas que hacen referencia a otras celdas en el mismo rango:

  1. Inserte una nueva columna (por el bien de ejemplo, la llamaremos columna A).
  2. En A1, ponga el valor [1]. (Puede comenzar en A10 o A50 si solo desea ordenar un rango)
  3. En A2, ponga la fórmula [= A1 + 1]. (Ajuste si no comenzó en A1 en el paso 2)
  4. Extienda la fórmula en A2 hasta la parte inferior de los datos que desea revertir.

    Ahora todo debe estar numerado del 1 al número de filas en el rango que está ordenando.

  5. Seleccione todas las filas en el rango que ha configurado.
  6. Haga clic en el menú Datos y seleccione "Ordenar rango por columna A, Z -> A".

Sus datos ahora se deben revertir el orden. Debido a la forma en que configuramos la fórmula de numeración, el número se restablecerá y aún comenzará desde 1 en la parte superior ... pero todos los datos reales en otras columnas deberían invertirse.

Mir
fuente
2
Esto es tan obscenamente fácil que tuve que golpearme la frente por no pensar en ello. Fantástica respuesta. +1.
GroggyOtter
2
Para los pasos 2 a 4, ni siquiera necesita una fórmula. Simplemente ingrese 1 en A1, 2 en A2, seleccione ambos y arrástrelo hacia abajo tanto como sea necesario.
Patrick
4

Siguiendo el ejemplo de Mir, puede colocar la función SORT en la celda D3 para invertir el orden de los datos en la columna C:

=sort(C3:C,A3:A,False)
artu
fuente