Hur kan jag göra data på en automatisk sortering av Google Sheets?

Låt oss säga att jag vill att Google Sheets automatiskt sorterar vissa data, till exempel kolumn C.

Hur gör jag det?

Jag vet att jag kan sortera data manuellt genom att högerklicka och välja Sortera data men det är inte det jag letar efter.

Svar

Du kan använda sort() -funktion för det, men du måste ha dina data på ett ställe och en automatiskt sorterad kopia av dessa data på en annan plats.

Till exempel, säg Jag har Sheet1 med mina data:

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

Sedan i Sheet2, cell A1, skulle jag lägga den här funktionen:

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

Detta skulle visa mina data, men sorterade efter kolumn C (den tredje kolumnen), stigande.

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

Kommentarer

  • Parametrar måste separeras med semikolon

    t.ex. = sort(Sheet1!A:C; 3; TRUE)

  • @Petr Det fungerar bara bra för mig med kommatecken.
  • @ user17634: Det beror på dina lokala inställningar.
  • Problemet med detta tillvägagångssätt är att du inte kan flytta objekt # 3 till position # 1 (det dupliceras # 3).

Svar

Det är också möjligt att använda Google Apps-skript för att uppnå automatisk sortering på plats av data.

Det här kan vara svårare att uppnå och mer benäget för fel (jag skulle fortfarande gå för William Jacksons lösning, +1 BTW), men jag tyckte att det var intressant nog att visa.

Jag har ett ark som ser ut så här:

automatisk sorteringsark

Jag lade till ett nytt skript med de här stegen:

  • i menyn, gå till Verktyg -> Skriptredigerare …
  • välj Skapa ett nytt projekt
  • i det tomma kodfönstret som visas klistra in följande kod som körs automatiskt när en cellen redigeras:

    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 } ); } } 
  • gå tillbaka till arket och börja leka med värdena för att se tabellen sortera automatiskt varje gång

Obs:

I ovanför skriptet

  • värdet 4 representerar index för kolumn D (Value -kolumnen – kolumnen D på att ”kommer att sorteras)
  • värdet "B3:E9" representerar tabellintervallet (exklusive rubrikraden)

Din tabell kommer sannolikt att skilja sig från min, så dessa värden bör justeras i enlighet med detta.

Kommentarer

  • Jag försökte din [redigerade] funktion onEdit ( händelse) {var sheet = event.source.getActiveSheet (); var editedCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = ” A2: F99 ”; if (editedCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({column: columnToSortBy}); }} men fortsätt att få ett fel: TypeError: Kan inte läsa egenskap ” källa ” från odefinierad. (rad 2) som är följande kod: var sheet = event.source.getActiveSheet (); några idéer? NM, få bara felet när du kör från skriptsidan, men det fungerar ordentligt på det faktiska spreadshee
  • men fortsätt att få ett fel: TypeError: Kan inte läsa egenskapen ” källa ” från odefinierad. (rad 2) som är följande kod: var sheet = event.source.getActiveSheet (); några idéer? NM, får bara felet när du kör från skriptsidan, men det fungerar ordentligt på det faktiska kalkylbladet. Fråga nu … dess sortering A-Z, hur ändrar jag den till automatisk sortering Z-A? tack
  • @ drizzt09 När du ringer till metoden anger du antagligen null för event -parametern, som annars är korrekt fylls av Googles kalkylinfrastruktur när en riktig händelse utlöses.
  • @ drizzt09 för att ändra sorteringsordningen, ändra range.sort så här: range.sort( { column : columnToSortBy, ascending: false } ); . För fler sorteringsalternativ se developers.google.com/apps-script/class_range#sort
  • @ w0lf Tack som fungerade perfekt. nu vill jag lägga till den eller ha en separat funktion som utför exakt samma funktion men vid öppen eller uppdatering. Så när jag öppnar / uppdaterar excel-arket sorteras den fjärde kolumnen automatiskt på samma sätt som när jag redigerar koden i kolumn 4 med din nuvarande kod. Tack

Svar

Ett annat alternativ utan skript är:

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

Området är begränsat (A1: C3) för där ordningen stiger upp kommer tomma poster att visas först.

Kommentarer

  • Kan du snälla meddela mig var ska jag lägga det här?
  • Du kan använda SELECT * WHERE C <> '' ORDER BY C för att ignorera tomma poster, då kan du använda ett tillräckligt stort intervall för att inkludera alla nuvarande och framtida rader.

Svar

Här ”är ett generiskt skript som automatiskt sorteras baserat på den första kolumnen och antar en rubrikrad.

Så här skapar du ett skript:

  • Gå till Verktyg -> Skriptredigerare i menyn …

I det tomma kodfönstret klistrar du in följande kod, som körs automatiskt när en cell redigeras:

 // 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 } ); } } 

Kommentarer

  • Jag tyckte att jag var tvungen att var sheet = SpreadsheetApp.getActiveSpreadsheet(); istället för vad ’ är här.
  • Det här fungerar bra, men hur kan jag redigera det så att det bara sorteras på ett enda ark i doc?
  • verkar inte ’ fungerar inte

Svar

Usi ng manuslösningen, men sortera på mer än en kolumn

Jag ville sortera efter en rullgardinsmeny och sedan efter datum.

För att göra det, ändra ”range.sort” -raden för antingen Cristian eller geekspotz ”kodavsnitt som så:

// 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}]);

Skillnaden är att lägga till raka parenteser runt hela ditt uttalande (array) och att separera sorteringarna med kommatecken.

Sortera kodändring hämtad från Serge ”s Stack Overflow svar här : Automatisk sortering på ark

Svar

Här skapade jag en automatisk sorteringsskript och kalkylark (det kräver lite arbete på arket, en kopieringspasta av koden och inställning av dina intervall. Det baseras på flera stackexchange-svar

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

Dess post och får värdet på det intervall du fokuserar på vid den senaste redigeringen jämför det med värdet nu efter den faktiska redigeringen och om annorlunda sorterar det tabellen.

Svar

Google Sheets har Filter just därför och gör det Du måste inte skapa ett nytt ark i ditt dokument.

Dokumentation: https://support.google.com/docs/answer/3540681

Svar

Det kan göras med hjälp av Google App Script. Skriptet sorteras automatiskt när det sker en ändring av arkdata.

På ditt Google-ark:
Välj Verktyg -> Skriptredigerare och klistra in skriptet nedan och spara.

Ersätt variablerna SHEET_NAME, SORT_DATA_RANGE och SORT_ORDER med motsvarande värden.

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."); } 

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *