Laten we zeggen dat ik wil dat Google Spreadsheets sommige gegevens automatisch sorteert, bijvoorbeeld kolom C
.
Hoe doe ik dat?
Ik weet dat ik gegevens handmatig kan sorteren door met de rechtermuisknop te klikken en Gegevens sorteren te selecteren, maar dit is niet wat ik zoeken.
Antwoord
U kunt de sort()
-functie daarvoor, maar u moet uw gegevens op de ene plaats hebben en een automatisch gesorteerde kopie van die gegevens op een andere plaats.
Stel bijvoorbeeld Ik heb Sheet1 met mijn gegevens:
| A | B | C ===================== 1 | This | this | 2 2 | Is | is | 1 3 | Test | test | 3
Dan in Sheet2, cel A1, zou ik deze functie plaatsen:
= sort (Blad1! A: C, 3, TRUE)
Dit zou mijn gegevens tonen, maar gesorteerd op kolom C (de derde kolom), oplopend.
| A | B | C ===================== 1 | Is | is | 1 2 | This | this | 2 3 | Test | test | 3
Opmerkingen
Answer
Het is ook mogelijk om Google Apps-scripts te gebruiken om de gegevens automatisch ter plaatse te sorteren.
Dit is misschien moeilijker te bereiken en vatbaarder voor fouten (ik zou nog steeds voor de oplossing van William Jackson gaan, +1 BTW), maar ik dacht dat het interessant genoeg was om te laten zien.
Ik heb een blad dat er als volgt uitziet:
Ik heb een nieuw script toegevoegd aan de hand van deze stappen:
- ga in het menu naar Tools -> Script Editor …
- selecteer Create een nieuw project
-
in het lege codevenster dat verschijnt, plakt u de volgende code, die automatisch wordt uitgevoerd wanneer een cel is bewerkt:
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 } ); } }
-
ga terug naar het blad en begin te spelen met de waarden om te zien dat de tabel elke keer automatisch wordt gesorteerd
Opmerking:
In de bovenstaande script,
- de waarde
4
vertegenwoordigt de index van kolom D (deValue
kolom – de op dat wordt gesorteerd) - de waarde
"B3:E9"
vertegenwoordigt het tabelbereik (exclusief de koptekstrij)
Uw tabel zal hoogstwaarschijnlijk verschillen van de mijne, dus deze waarden moeten dienovereenkomstig worden aangepast.
Opmerkingen
- Ik heb de jouwe [bewerkte] functie geprobeerd op Bewerken ( event) {var sheet = event.source.getActiveSheet (); var editCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = ” A2: F99 “; if (editCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({column: columnToSortBy}); }} maar krijg steeds een foutmelding: TypeError: Kan eigenschap ” bron ” niet lezen van niet-gedefinieerd. (regel 2) wat de volgende code is: var sheet = event.source.getActiveSheet (); om het even welke ideeën? NM, krijg alleen de foutmelding bij het uitvoeren vanaf de scriptpagina, maar het werkt correct op de daadwerkelijke spreadshee
- maar krijg steeds een foutmelding: TypeError: Kan eigenschap ” bron ” van ongedefinieerd. (regel 2) wat de volgende code is: var sheet = event.source.getActiveSheet (); om het even welke ideeën? NM, krijg de fout alleen bij het uitvoeren van de scriptpagina, maar het werkt correct op de daadwerkelijke spreadsheet. Vraag nu … het sorteert A-Z, hoe verander ik het in automatisch sorteren Z-A? bedankt
- @ drizzt09 Wanneer je de methode aanroept, specificeer je waarschijnlijk
null
voor deevent
parameter, die anders correct is gevuld door de Google Spreadsheet-infrastructuur wanneer een echte gebeurtenis wordt geactiveerd. - @ drizzt09 om de sorteervolgorde te wijzigen, wijzigt u de regel
range.sort
als volgt:range.sort( { column : columnToSortBy, ascending: false } );
. Zie developers.google.com/apps-script/class_range#sort - @ w0lf voor meer sorteeropties. Dankjewel, dat werkte perfect. nu zou ik er iets aan willen toevoegen of een aparte functie hebben die exact dezelfde functie uitvoert, maar dan bij openen of vernieuwen. Dus wanneer ik het Excel-blad open / vernieuw, wordt de 4e kolom automatisch aflopend gesorteerd, hetzelfde als wanneer ik de code in kolom 4 bewerk met uw huidige code. Bedankt
Antwoord
Een andere optie zonder script is:
=QUERY(A1:C3,"SELECT * ORDER BY C")
Het bereik is beperkt (A1: C3) omdat waar de volgorde oplopend is, blanco items eerst verschijnen.
Opmerkingen
- Kunt u me laten weten waar ik dit moet plaatsen?
- U kunt
SELECT * WHERE C <> '' ORDER BY C
om lege invoeren te negeren, dan kunt u een bereik gebruiken dat groot genoeg is om alle huidige en toekomstige rijen op te nemen.
Antwoord
Hier “is een generiek script dat automatisch wordt gesorteerd op basis van de eerste kolom en uitgaat van een koprij.
Om een script te maken:
- Ga in het menu naar Tools -> Script Editor …
Plak in het lege codevenster de volgende code, die automatisch wordt uitgevoerd wanneer een cel wordt bewerkt:
// 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 } ); } }
Reacties
- Ik merkte dat ik
var sheet = SpreadsheetApp.getActiveSpreadsheet();
in plaats van wat ‘ s hier. - Dit werkt prima, maar hoe kan ik dit bewerken zodat het alleen op een enkel blad in document wordt gesorteerd?
- lijkt niet ‘ t te werken
Antwoord
Usi ng de scriptoplossing, maar sorteer op meer dan één kolom
Ik wilde sorteren op een dropdown-menukolom en vervolgens op datum.
Om dit te doen, wijzigt u de regel “range.sort” van de codefragmenten van Cristian of geekspotz als volgt:
// 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}]);
Het verschil is het toevoegen van rechte haakjes rond je hele statement (array) en het scheiden van de sorteringen door kommas.
Sorteercodemodificatie getrokken uit Serges Stack Overflow-antwoord hier : Automatisch sorteren op bladen
Antwoord
Hier heb ik een automatisch sorteren van script en spreadsheet (het vereist wat werk op het blad, een kopieer en plak van de code en het instellen van uw bereiken. Het is gebaseerd op multiple stackexchange antwoord
https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0
Zijn record en krijgt de waarde van het bereik waarop u zich bij de laatste bewerking concentreert, vergelijk het met de waarde nu na daadwerkelijke bewerking en als anders sorteert het de tabel.
Antwoord
Google Sheets heeft Filters om deze reden en doet u hoeft geen nieuw blad in uw document te maken.
Documentatie: https://support.google.com/docs/answer/3540681
Antwoord
Het kan worden gedaan met Google App Script. Het script wordt automatisch gesorteerd wanneer er een wijziging is in de bladgegevens.
Op je Google-spreadsheet:
Kies Extra -> Scripteditor en plak het onderstaande script en sla het op.
Vervang de variabelen SHEET_NAME, SORT_DATA_RANGE en SORT_ORDER door overeenkomstige waarden.
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."); }
Bron: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/
bijv.
= sort(Sheet1!A:C; 3; TRUE)