Wie kann ich einige Daten in einer automatischen Sortierung von Google Sheets vornehmen?

57

Angenommen, Google Sheets soll einige Daten, z. B. Spalten, automatisch sortieren C.

Wie mache ich das?

Ich weiß, dass ich Daten manuell sortieren kann, indem ich mit der rechten Maustaste klicke und " Daten sortieren" auswähle , aber das ist nicht das, wonach ich suche.

pnuts
quelle

Antworten:

51

Sie können die sort()Funktion dafür verwenden, aber Sie müssen Ihre Daten an einem Ort haben und eine automatisch sortierte Kopie dieser Daten an einem anderen Ort.

Angenommen, ich habe Sheet1 mit meinen Daten:

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

Dann würde ich in Sheet2, Zelle A1, diese Funktion einfügen:

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

Dies würde meine Daten anzeigen, aber aufsteigend nach Spalte C (dritte Spalte) sortiert.

   | A    | B    | C
=====================
 1 | Is   | is   | 1
 2 | This | this | 2
 3 | Test | test | 3
William Jackson
quelle
Parameter müssen durch Semikolon getrennt werden, ;z. B.= sort(Sheet1!A:C; 3; TRUE)
2
@Petr Bei mir funktioniert das mit den Kommas.
William Jackson
6
@ user17634: Das hängt von Ihren Ländereinstellungen ab.
Vidar S. Ramdal
41

Es ist auch möglich, Google Apps Scripts zu verwenden, um eine automatische direkte Sortierung der Daten zu erreichen.

Dies ist möglicherweise schwieriger zu erreichen und fehleranfälliger (ich würde mich immer noch für William Jacksons Lösung entscheiden, +1 BTW), aber ich fand es interessant genug, dies zu zeigen.

Ich habe ein Blatt, das so aussieht:

Auto-Sortierblatt

Mit den folgenden Schritten habe ich ein neues Skript hinzugefügt:

  • Gehen Sie im Menü zu Extras -> Skript-Editor ...
  • Wählen Sie Neues Projekt erstellen
  • Fügen Sie in das leere Codefenster den folgenden Code ein, der automatisch ausgeführt wird, wenn eine Zelle bearbeitet wird:

    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 } );
      }
    }
    
  • Kehren Sie zum Blatt zurück und spielen Sie mit den Werten, damit die Tabelle jedes Mal automatisch sortiert wird

Hinweis:

Im obigen Skript

  • der Wert 4stellt den Index der Spalte D dar (die ValueSpalte - die Spalte, nach der sortiert werden soll)
  • der Wert "B3:E9"repräsentiert den Tabellenbereich (ohne die Kopfzeile)

Ihre Tabelle wird höchstwahrscheinlich von meiner abweichen, daher sollten diese Werte entsprechend angepasst werden.

Cristian Lupascu
quelle
Ich habe deine [bearbeitete] Funktion auf Bearbeiten (Ereignis) ausprobiert {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}); }}, aber es wird weiterhin ein Fehler angezeigt: TypeError: Die Eigenschaft "source" kann nicht von undefined gelesen werden. (Zeile 2) Dies ist der folgende Code: var sheet = event.source.getActiveSheet (); irgendwelche Ideen? NM, erhalte nur den Fehler, wenn er von der Skriptseite ausgeführt wird, aber er funktioniert ordnungsgemäß auf der aktuellen Tabellenkalkulation
drizzt09
Es wird jedoch weiterhin ein Fehler angezeigt: TypeError: Die Eigenschaft "source" kann nicht von undefined gelesen werden. (Zeile 2) Dies ist der folgende Code: var sheet = event.source.getActiveSheet (); irgendwelche Ideen? NM: Der Fehler wird nur beim Ausführen von der Skriptseite angezeigt, funktioniert jedoch ordnungsgemäß in der tatsächlichen Tabelle. Nun frage ... seine Sortierung von AZ, wie ändere ich es auf automatische Sortierung von ZA? danke
drizzt09
@ drizzt09 Wenn Sie die Methode aufrufen, geben Sie wahrscheinlich nullfür den eventParameter an, der ansonsten ordnungsgemäß von der Google Spreadsheet-Infrastruktur ausgefüllt wird, wenn ein echtes Ereignis ausgelöst wird.
Cristian Lupascu
3
@ drizzt09 die Sortierreihenfolge zu ändern, wird die Änderung range.sortZeile wie folgt aus : range.sort( { column : columnToSortBy, ascending: false } ); . Weitere
Sortieroptionen finden
@w0lf Danke, das hat perfekt funktioniert. jetzt möchte ich es hinzufügen oder eine separate Funktion haben, die genau die gleiche Funktion ausführt, aber beim Öffnen oder Aktualisieren. Wenn ich also das Excel-Blatt öffne / aktualisiere, wird die vierte Spalte automatisch absteigend sortiert, genauso wie wenn ich den Code in Spalte 4 mit Ihrem aktuellen Code bearbeite. Thanks
10

Hier ist ein generisches Skript, das basierend auf der ersten Spalte automatisch sortiert und eine Kopfzeile annimmt.

So erstellen Sie ein Skript:

  • Gehen Sie im Menü zu Extras -> Skripteditor ...

Fügen Sie im leeren Codefenster den folgenden Code ein, der automatisch ausgeführt wird, wenn eine Zelle bearbeitet wird:

 // 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
quelle
3
Ich fand, ich musste var sheet = SpreadsheetApp.getActiveSpreadsheet();statt dessen, was hier ist.
dldnh
Das funktioniert prima, aber wie kann ich das bearbeiten, damit es nur auf einem einzelnen Blatt im Dokument sortiert wird?
Moobot
scheint nicht zu funktionieren
shadowz1337
6

Eine andere Option ohne Skript ist:

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

Der Bereich ist eingeschränkt (A1: C3), da bei aufsteigender Reihenfolge zuerst leere Einträge angezeigt werden.

pnuts
quelle
4
Könnten Sie mir bitte mitteilen, wo ich das eintragen soll?
Louis Tran
1
Mit können Sie SELECT * WHERE C <> '' ORDER BY Cleere Einträge ignorieren und dann einen Bereich verwenden, der groß genug ist, um alle aktuellen und zukünftigen Zeilen einzuschließen.
Guss
0

Verwenden Sie die Skriptlösung, aber sortieren Sie nach mehr als einer Spalte

Ich wollte nach einer Dropdown-Menü-Spalte und dann nach Datum sortieren.

Ändern Sie dazu die Zeile "range.sort" eines der Codeausschnitte von Cristian oder geekspotz wie folgt:

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

Der Unterschied besteht darin, die geraden Klammern um die gesamte Anweisung (Array) zu setzen und die Sortierungen durch Kommas zu trennen.

Die Änderung des Sortiercodes stammt aus Serge's Antwort zum Stapelüberlauf : Automatische Sortierung auf Blättern

Tiefenstruktur
quelle