Ordenar en Google Sheets mediante macro de JavaScript en varias columnas

infm Mensajes publicados 35 Estado Miembro -  
infm Mensajes publicados 35 Estado Miembro -
Hola,

He leído la información sobre el tema vecino.
Sé hacer lo que se indica.
Sin embargo, no logro crear el script (javascript) para que la ordenación se realice en varias columnas.
Quiero decir:
ordenación de toda la hoja (¡ver más abajo!)
ordenación a partir de la columna D
seguida de ordenación a partir de la columna A
esto para que las filas con el mismo valor en D estén en orden en A
Por ejemplo, ordenación por departamento y luego por nombres, es decir, orden alfabético de los nombres de un mismo departamento.

Preciso hoja y no rango.
Porque para rango podemos hacerlo manualmente (es decir, haciéndolo con el teclado)
Pero necesito definir el rango y este es evolutivo.
No encontré cómo indicar el segundo término del rango mediante una variable que corresponda al número de filas (NBVAL). ¡Siempre tengo error de sintaxis!
(¿Quizás definirlo al máximo, por ejemplo, 3:65000? ¿cuál es el máximo?)

Para la ordenación de la hoja no se puede (¡no sé hacerlo!) indicar más de una columna.

Entonces, si ordeno la hoja no logro encargarme de dos columnas
y si ordeno rango no consigo definir la zona de ordenación con variable (número de filas)

Gracias por cualquier ayuda.

BM

Configuración: Windows / Chrome 80.0.3987.100

3 respuestas

PapyLuc51 Mensajes publicados 4567 Fecha de registro   Estado Miembro Última intervención   1 511
 
Hola,

Si se pueden ordenar varias columnas en toda la hoja y sin macros; procedimiento:

• Ctrl+A para seleccionar toda la hoja (o hacer clic en la casilla a la izquierda de A y encima de 1)
• Pestaña "datos" >> ordenar un rango
• Marcar si la fila 1 de la hoja tiene encabezados (si no es así, será necesario seleccionar a partir de la primera fila de la tabla)
• Ordenar por columna (opción) A>Z
• Agregar una columna para el orden
• y luego por columna (opción) A>Z.....

Atentamente
0
infm Mensajes publicados 35 Estado Miembro
 
Lo siento, pero no es lo que busco.
Eso lo sé hacer.

Pero todos los usuarios no sabrán hacerlo.
Por lo tanto, estoy creando botones a los que asocio los diferentes tipos de ordenación útiles.
Y ahí es donde hay que preparar macros.
Estas macros son en JavaScript
he creado para el rango a ordenar del tipo siguiente:

function TriDateEtNom() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('3:1000').activate()
.sort([{column: 4, ascending: true}, {column: 1, ascending: true}]);
};

En esta macro, mi problema es que el 1000 (última fila) sea reemplazado por una variable porque el número de filas es evolutivo y eso no lo he logrado.

He elegido la ordenación de un rango porque para ordenar una hoja no he encontrado la sintaxis que permite ordenar por varias columnas como en el caso anterior la columna 4 seguida de la columna 1.

Eso es: encontrar el script (en JavaScript) para reemplazar lo que hacemos fácilmente de manera manual.

He construido scripts en hojas a ordenar que se parecen a los anteriores pero siempre da error, falta algo y no veo qué falta.

A seguir entonces.
0
PapyLuc51 Mensajes publicados 4567 Fecha de registro   Estado Miembro Última intervención   1 511
 
Hola,

No voy a ser de gran ayuda con esta macro; no tengo idea.

Si te puede ayudar, para una tabla personal en Excel grabé una macro de ordenamiento que al final seleccionaba la última celda que contenía una fecha en la columna A.

Después del ordenamiento seleccioné la última celda al final de la columna de la tabla y luego presioné Ctrl + flecha hacia arriba para volver a la última celda con valor.
Aquí está el código que resultó

Sub Botón()

ActiveSheet.Unprotect
Range("A7:R800").Sort key1:=Range("A7"), Order1:=xlAscending

ActiveWindow.SmallScroll Down:=585
Range("A800").Select
Selection.End(xlUp).Select
ActiveSheet.Protect

End Sub


No he verificado si es posible así en Google Sheets

Saludos cordiales
0
PapyLuc51 Mensajes publicados 4567 Fecha de registro   Estado Miembro Última intervención   1 511
 
RE:

He hecho una prueba en Sheets con las mismas acciones que arriba, excepto por la eliminación de la protección al principio y la protección al final, y aquí está el script que resulta
ordenar en un rango A3:D100 comenzando por la columna D, luego la columna A; seleccionar la celda A100 y con Ctrl + flecha hacia arriba volver a la última celda con datos de la columna A

/** @OnlyCurrentDoc */

function Ordenar() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A3:D100').activate()
.sort([{column: 4, ascending: true}, {column: 1, ascending: true}]);
spreadsheet.getRange('A100').activate();
spreadsheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.UP).activate();
};


Espero que te sirva

Atentamente
0
infm Mensajes publicados 35 Estado Miembro > PapyLuc51 Mensajes publicados 4567 Fecha de registro   Estado Miembro Última intervención  
 
Gracias por estas propuestas, las revisaré en cuanto pueda.

BM
0