¿Cómo puedo hacer que algunos datos en una clasificación automática de Google Sheets?

Digamos que quiero que Google Sheets clasifique automáticamente algunos datos, por ejemplo, la columna C.

¿Cómo hago eso?

Sé que puedo ordenar los datos manualmente haciendo clic con el botón derecho y seleccionando Ordenar datos , pero esto no es lo que «m buscando.

Respuesta

Puede usar el sort() función para eso, pero debe tener sus datos en un lugar y una copia ordenada automáticamente de esos datos en otro lugar.

Por ejemplo, digamos Tengo Sheet1 con mis datos:

 | A | B | C ===================== 1 | This | this | 2 2 | Is | is | 1 3 | Test | test | 3 

Luego, en Sheet2, celda A1, pondría esta función:

= sort (Sheet1! A: C, 3, TRUE)

Esto mostraría mis datos, pero ordenados por columna C (la tercera columna), ascendente.

 | A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3 

Comentarios

  • Los parámetros deben estar separados por punto y coma

    p. ej. = sort(Sheet1!A:C; 3; TRUE)

  • @Petr Me funciona bien con las comas.
  • @ user17634: Eso depende de la configuración regional.
  • El problema con este enfoque es que no puede mover el elemento n. ° 3 a la posición del elemento n. ° 1 (duplica el n. ° 3).

Respuesta

También es posible utilizar Google Apps Scripts para lograr la clasificación automática in situ de los datos.

Esto puede ser más difícil de lograr y más propenso a errores (todavía optaría por la solución de William Jackson, +1 BTW), pero pensé que era lo suficientemente interesante como para mostrarlo.

Tengo una hoja que se ve así:

hoja de clasificación automática

Agregué una nueva secuencia de comandos, siguiendo estos pasos:

  • en el menú, vaya a Herramientas -> Editor de secuencias de comandos …
  • seleccione Crear un nuevo proyecto
  • en la ventana de código vacía que aparece, pegue el siguiente código, que se ejecutará automáticamente cada vez que la celda está editada:

    function onEdit(event){ var sheet = event.source.getActiveSheet(); var editedCell = sheet.getActiveCell(); var columnToSortBy = 4; var tableRange = "B3:E9"; if(editedCell.getColumn() == columnToSortBy){ var range = sheet.getRange(tableRange); range.sort( { column : columnToSortBy } ); } } 
  • regrese a la hoja y comience a jugar con los valores para ver la tabla ordenada automáticamente cada vez

Nota:

En el el script anterior,

  • el valor 4 representa el índice de la columna D (la Value columna – la en ese «s se va a ordenar)
  • el valor "B3:E9" representa el rango de la tabla (excluyendo la fila del encabezado)

Es muy probable que su tabla difiera de la mía, por lo que estos valores deben ajustarse en consecuencia.

Comentarios

  • Probé su función [editada] enEdit ( evento) {hoja var = event.source.getActiveSheet (); var editedCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = » A2: F99 «; if (editedCell.getColumn () == columnToSortBy) {rango var = sheet.getRange (tableRange); range.sort ({columna: columnToSortBy}); }} pero sigue recibiendo un error: TypeError: No se puede leer la propiedad » source » de undefined. (línea 2) que es el siguiente código: var sheet = event.source.getActiveSheet (); ¿algunas ideas? NM, solo aparece el error cuando se ejecuta desde la página del script, pero funciona correctamente en la hoja de cálculo real
  • pero sigue recibiendo un error: TypeError: No se puede leer la propiedad » fuente » de undefined. (línea 2) que es el siguiente código: var sheet = event.source.getActiveSheet (); ¿algunas ideas? NM, solo obtiene el error cuando se ejecuta desde la página del script, pero funciona correctamente en la hoja de cálculo real. Ahora pregunta … está ordenando A-Z, ¿cómo lo cambio para ordenar automáticamente Z-A? gracias
  • @ drizzt09 Cuando llama al método, probablemente especifique null para el parámetro event, que por lo demás es correcto poblado por la infraestructura de hoja de cálculo de Google cuando se activa un evento real.
  • @ drizzt09 para cambiar el orden de clasificación, cambie la línea range.sort así: range.sort( { column : columnToSortBy, ascending: false } ); . Para obtener más opciones de clasificación, consulte developers.google.com/apps-script/class_range#sort
  • @ w0lf Gracias por trabajar perfectamente. ahora me gustaría agregarle o tener una función separada que realiza exactamente la misma función pero al abrir o actualizar. Entonces, cuando abro / actualizo la hoja de Excel, se clasificará automáticamente la cuarta columna descendente de la misma manera que cuando edito el código en la columna 4 con su código actual. Gracias

Responder

Otra opción sin un script es:

=QUERY(A1:C3,"SELECT * ORDER BY C") 

El rango es restringido (A1: C3) porque donde el orden es ascendente aparecerán primero las entradas en blanco.

Comentarios

  • ¿Podrías dejarme saber dónde debo poner esto?
  • Puedes usar SELECT * WHERE C <> '' ORDER BY C para ignorar las entradas en blanco, entonces puede usar un rango lo suficientemente grande para incluir todas las filas actuales y futuras.

Respuesta

Aquí «una secuencia de comandos genérica que se clasificará automáticamente según la primera columna y asume una fila de encabezado.

Para crear una secuencia de comandos:

  • En el menú, vaya a Herramientas -> Editor de secuencias de comandos …

En la ventana de código vacía, pegue el siguiente código, que se ejecutará automáticamente cada vez que se edite una celda:

 // LinkBack to this script: // http://webapps.stackexchange.com/questions/7211/how-can-i-make-some-data-on-a-google-spreadsheet-auto-sorting/43036#43036 /** * Automatically sorts the 1st column (not the header row) Ascending. */ function onEdit(event){ var sheet = event.source.getActiveSheet(); var editedCell = sheet.getActiveCell(); var columnToSortBy = 1; var tableRange = "A2:T99"; // What to sort. if(editedCell.getColumn() == columnToSortBy){ var range = sheet.getRange(tableRange); range.sort( { column : columnToSortBy, ascending: true } ); } } 

Comentarios

  • Descubrí que tenía que var sheet = SpreadsheetApp.getActiveSpreadsheet(); en lugar de lo que ‘ hay aquí.
  • Esto funciona muy bien, pero ¿cómo puedo editarlo para que solo se clasifique en una sola hoja en el documento?
  • No ‘ parece funcionar

Responder

Usi ng la solución de secuencia de comandos, pero ordenar en más de una columna

Quería ordenar por una columna del menú desplegable y luego por fecha.

Para hacerlo, modifique la línea «range.sort» de los fragmentos de código de Cristian o geekspotz de la siguiente manera:

// Sorts descending by edited column, then ascending by column 1 // Note the use of an array
range.sort([{column: columnToSortBy, ascending: false}, {column: 1, ascending: true}]);

La diferencia es agregar los corchetes alrededor de toda su declaración (matriz) y separar los ordenamientos por comas.

Modificación del código de ordenamiento extraída de la respuesta de desbordamiento de pila de Serge aquí : Clasificación automática en hojas

Respuesta

Aquí creé un secuencia de comandos de clasificación automática y hoja de cálculo (requiere un poco de trabajo en la hoja, copiar y pegar el código y configurar sus rangos. Se basa en múltiples respuestas de intercambio de pila

https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0

Su registro y obtiene el valor del rango en el que se enfoca en la última edición, compárelo con el valor ahora después de la edición real y si diferente, ordena la tabla.

Respuesta

Google Sheets tiene Filtros por esta misma razón y no n «No es necesario que cree una nueva hoja en su documento.

Documentación: https://support.google.com/docs/answer/3540681

Respuesta

Se puede hacer usando Google App Script. El script se ordenará automáticamente cada vez que haya un cambio en los datos de la hoja.

En su hoja de Google:
Elija Herramientas -> Editor de secuencias de comandos, pegue la secuencia de comandos a continuación y guarde.

Reemplace las variables SHEET_NAME, SORT_DATA_RANGE y SORT_ORDER con los valores correspondientes.

SHEET_NAME = "Sheet1"; SORT_DATA_RANGE = "A1:C999"; SORT_ORDER = [ {column: 3, ascending: false}, // 3 = column number, sorting by descending order {column: 1, ascending: true}, // 1 = column number, sort by ascending order {column: 2, ascending: true} ]; function onEdit(e){ multiSortColumns(); } function multiSortColumns(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName(SHEET_NAME); var range = sheet.getRange(SORT_DATA_RANGE); range.sort(SORT_ORDER); ss.toast("Sort complete."); } 

Fuente: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *