¿Cómo puedo hacer algunos datos en una clasificación automática de Hojas de cálculo de Google?

58

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

¿Cómo puedo hacer eso?

Sé que puedo ordenar los datos manualmente haciendo clic derecho y seleccionando Ordenar datos , pero esto no es lo que estoy buscando.

nueces
fuente

Respuestas:

52

Puede usar la 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, supongamos que 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:

= ordenar (Hoja1! A: C, 3, VERDADERO)

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

   | A    | B    | C
=====================
 1 | Is   | is   | 1
 2 | This | this | 2
 3 | Test | test | 3
William Jackson
fuente
Los parámetros deben estar separados por punto y coma, por ;ejemplo= sort(Sheet1!A:C; 3; TRUE)
2
@Petr Funciona bien para mí con las comas.
William Jackson
66
@ user17634: Eso depende de su configuración regional.
Vidar S. Ramdal
43

También es posible usar los scripts de Google Apps para lograr la clasificación automática de los datos en el lugar.

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

Tengo una hoja que se ve así:

hoja de clasificación automática

Agregué un nuevo script, usando 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 se edite una celda:

    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 ordenar automáticamente cada vez

Nota:

En el guión anterior,

  • el valor 4representa el índice de la columna D (la Valuecolumna, la que se va a ordenar)
  • el valor "B3:E9"representa el rango de la tabla (excluyendo la fila del encabezado)

Lo más probable es que su tabla difiera de la mía, por lo que estos valores deben ajustarse en consecuencia.

Cristian Lupascu
fuente
Probé la función suya [editada] onEdit (event) {var sheet = event.source.getActiveSheet (); var editedCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = "A2: F99"; if (editedCell.getColumn () == columnToSortBy) {var rango = sheet.getRange (tableRange); range.sort ({column: columnToSortBy}); }} pero sigue apareciendo un error: TypeError: No se puede leer la propiedad "fuente" de indefinido. (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
drizzt09
pero sigue apareciendo un error: TypeError: No se puede leer la propiedad "fuente" de indefinido. (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. Ahora pregunta ... está ordenando AZ, ¿cómo lo cambio para ordenar automáticamente ZA? gracias
drizzt09
@ drizzt09 Cuando llama al método que probablemente especifique nullpara el eventparámetro, que de otro modo se rellena correctamente con la infraestructura de la hoja de cálculo de Google cuando se desencadena un evento real.
Cristian Lupascu
3
@ drizzt09 para cambiar el orden de clasificación, cambiar la range.sortlínea como la siguiente: range.sort( { column : columnToSortBy, ascending: false } ); . Para obtener más opciones de clasificación, visite developers.google.com/apps-script/class_range#sort
Cristian Lupascu
@ w0lf Gracias que funcionó perfecto. ahora me gustaría agregarle o tener una función separada que realice exactamente la misma función pero en abrir o actualizar. Entonces, cuando abro / actualizo la hoja de Excel, ordenará automáticamente la cuarta columna descendiendo de la misma manera que cuando edito el código en la columna 4 con su código actual. Gracias
10

Aquí hay un script genérico que se clasificará automáticamente según la primera columna y asume una fila de encabezado.

Para crear un script:

  • 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 } );
  }
}
geekzspot
fuente
3
Descubrí que tenía que var sheet = SpreadsheetApp.getActiveSpreadsheet();hacerlo en lugar de lo que hay aquí.
dldnh
Esto funciona muy bien, pero ¿cómo puedo editar esto para que solo se clasifique en una sola hoja en el documento?
moobot
no parece funcionar
shadowz1337
7

Otra opción sin un script es:

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

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

nueces
fuente
44
¿Podría decirme dónde debo poner esto?
Louis Tran
1
Puede usar SELECT * WHERE C <> '' ORDER BY Cpara ignorar las entradas en blanco, luego puede usar un rango lo suficientemente grande como para incluir todas las filas actuales y futuras.
Guss
0

Usando la solución de script, pero ordena en más de una columna

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

Para hacerlo, modifique la línea "range.sort" de cualquiera 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.

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

estructura profunda
fuente