Ordenar en Google Sheets mediante macro de JavaScript en varias columnas
infm
Mensajes publicados
35
Estado
Miembro
-
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
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
Enlaces relacionados:
- Ordenar automáticamente por nombres de columna "C" - Google Sheets
- Hojas: Colorear una celda de varios colores según diferentes condiciones
- Quitar el orden alfabético en una tabla dinámica de Sheets
- Google Sheets Si celda... comienza con... entonces Función ...
- Cursor desaparecido en Google Sheets
- Exponente en Google Sheets
3 respuestas
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
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
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.
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.
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ó
No he verificado si es posible así en Google Sheets
Saludos cordiales
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
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
Espero que te sirva
Atentamente
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