La oss si at jeg vil at Google Sheets automatisk sorterer noen data, for eksempel kolonne C
.
Hvordan gjør jeg det?
Jeg vet at jeg kan sortere data manuelt ved å høyreklikke og velge Sorter data , men dette er ikke det jeg på jakt etter.
Svar
Du kan bruke sort()
funksjon for det, men du må ha dataene dine på ett sted, og en automatisk sortert kopi av dataene på et annet sted.
For eksempel si Jeg har Sheet1 med dataene mine:
| A | B | C ===================== 1 | This | this | 2 2 | Is | is | 1 3 | Test | test | 3
Så i Sheet2, celle A1, vil jeg sette denne funksjonen:
= sort (Sheet1! A: C, 3, TRUE)
Dette viser dataene mine, men sortert etter kolonne C (tredje kolonne), stigende.
| A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3
Kommentarer
Svar
Det er også mulig å bruke Google Apps Scripts for å oppnå automatisk sortering av dataene på stedet.
Dette kan være vanskeligere å oppnå og mer utsatt for feil (jeg vil fremdeles gå for William Jacksons løsning, +1 BTW), men jeg syntes det var interessant nok å vise.
Jeg har et ark som ser slik ut:
Jeg la til et nytt skript ved å bruke disse trinnene:
- i menyen, gå til Verktøy -> Script Editor …
- velg Create et nytt prosjekt
-
i det tomme kodevinduet som vises, lim inn følgende kode, som kjøres automatisk når en cellen redigeres:
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å tilbake til arket og begynn å leke med verdiene for å se tabellen sortere automatisk hver gang
Merk:
I over skriptet,
- verdien
4
representerer indeksen til kolonne D (Value
kolonnen – kolonnen D på at «skal sorteres) - verdien
"B3:E9"
representerer tabellområdet (unntatt toppraden)
Tabellen din vil mest sannsynlig avvike fra min, så disse verdiene bør justeres tilsvarende.
Kommentarer
- Jeg prøvde din [redigerte] funksjon på Rediger ( hendelse) {var sheet = event.source.getActiveSheet (); var editedCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = » A2: F99 «; hvis (editedCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({kolonne: columnToSortBy}); }} men fortsett å få en feil: TypeError: Kan ikke lese egenskap » kilde » fra udefinert. (linje 2) som er følgende kode: var sheet = event.source.getActiveSheet (); noen ideer? NM, får bare feilen når du kjører fra skriptsiden, men den fungerer som den skal på selve spreadshee
- men fortsett å få en feil: TypeError: Kan ikke lese egenskap » kilde » fra udefinert. (linje 2) som er følgende kode: var sheet = event.source.getActiveSheet (); noen ideer? NM, får bare feilen når du kjører fra skriptsiden, men den fungerer som den skal på det faktiske regnearket. Nå spørsmål … dens sortering AZ, hvordan endrer jeg den til automatisk sortering Z-A? takk
- @ drizzt09 Når du ringer til metoden, spesifiserer du sannsynligvis
null
forevent
-parameteren, som ellers er riktig befolket av Googles regnearkinfrastruktur når en ekte hendelse utløses. - @ drizzt09 for å endre sorteringsrekkefølgen, endre
range.sort
linjen slik:range.sort( { column : columnToSortBy, ascending: false } );
. For flere sorteringsalternativer, se developers.google.com/apps-script/class_range#sort - @ w0lf Takk som fungerte perfekt. nå vil jeg legge til det eller ha en egen funksjon som utfører nøyaktig samme funksjon, men på åpen eller oppdatering. Så når jeg åpner / oppdaterer excel-arket, vil det automatisk sortere 4. kolonne synkende som når jeg redigerer koden i kolonne 4 med din nåværende kode. Takk
Svar
Et annet alternativ uten skript er:
=QUERY(A1:C3,"SELECT * ORDER BY C")
Området er begrenset (A1: C3) fordi der hvor bestillingen stiger, vil tomme oppføringer vises først.
Kommentarer
- Kan du gi meg beskjed hvor skal jeg legge dette inn?
- Du kan bruke
SELECT * WHERE C <> '' ORDER BY C
for å ignorere tomme oppføringer, så kan du bruke et stort nok utvalg til å inkludere alle nåværende og fremtidige rader.
Svar
Her «er et generisk skript som autosorteres basert på første kolonne, og forutsetter en overskriftsrad.
Slik oppretter du et skript:
- Gå til Verktøy -> Skriptredigerer i menyen …
I det tomme kodevinduet limer du inn følgende kode, som kjører automatisk når en celle redigeres:
// 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
- Jeg fant ut at jeg måtte
var sheet = SpreadsheetApp.getActiveSpreadsheet();
i stedet for hva ‘ er her. - Dette fungerer bra, men hvordan kan jeg redigere dette slik at det bare sorteres på et enkelt ark i doc?
- virker ikke ‘ t fungerer
Svar
Usi ng skriptløsningen, men sorter på mer enn en kolonne
Jeg ønsket å sortere etter en rullegardinmeny og deretter etter dato.
For å gjøre det, endrer du «range.sort» -linjen til en av Cristians eller geekspotz kodesnutter slik:
// 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}]);
Forskjellen er å legge til rette parenteser rundt hele setningen (array) og skille sorteringene med komma.
Sortering av kodemodifikasjon hentet fra Serge «s Stack Overflow svar her : Automatisk sortering på ark
Svar
Her opprettet jeg en automatisk sorteringsskript og regneark (det krever litt arbeid på arket, en kopipasta av koden og innstilling av områdene. Det er basert på flere stackexchange-svar
https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0
Dens rekord og får verdien av området du fokuserer på ved siste redigering, sammenlign det med verdi nå etter faktisk redigering, og hvis forskjellig sorterer det tabellen.
Svar
Google Sheets har Filtre nettopp av denne grunn og gjør det krever ikke at du lager et nytt ark i dokumentet.
Dokumentasjon: https://support.google.com/docs/answer/3540681
Svar
Det kan gjøres ved hjelp av Google App Script. Skriptet sorteres automatisk når det skjer en endring i arkdata.
På Google Sheet:
Velg Verktøy -> Script Editor og lim inn skriptet nedenfor og lagre.
Erstatt variablene SHEET_NAME, SORT_DATA_RANGE og SORT_ORDER med tilsvarende verdier.
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."); }
Kilde: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/
f.eks.
= sort(Sheet1!A:C; 3; TRUE)