Bagaimana saya bisa membuat beberapa data pada penyortiran otomatis Google Sheets?

58

Katakanlah saya ingin Google Sheets mengurutkan beberapa data secara otomatis, misalnya kolom C.

Bagaimana aku melakukan itu?

Saya tahu bahwa saya dapat mengurutkan data secara manual dengan mengklik kanan dan memilih Urutkan data , tetapi ini bukan yang saya cari.

kacang
sumber

Jawaban:

52

Anda dapat menggunakan yang sort()fungsi untuk itu, tetapi Anda harus memiliki data Anda di satu tempat, dan salinan secara otomatis diurutkan dari data yang di tempat lain.

Misalnya, saya punya Sheet1 dengan data saya:

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

Kemudian di Sheet2, sel A1, saya akan meletakkan fungsi ini:

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

Ini akan menunjukkan data saya, tetapi diurutkan berdasarkan kolom C (kolom ketiga), naik.

   | A    | B    | C
=====================
 1 | Is   | is   | 1
 2 | This | this | 2
 3 | Test | test | 3
William Jackson
sumber
Parameter harus dipisahkan dengan titik koma ;misalnya= sort(Sheet1!A:C; 3; TRUE)
2
@Petr Ini berfungsi dengan baik untuk saya dengan koma.
William Jackson
6
@ user17634: Itu tergantung pada pengaturan lokal Anda.
Vidar S. Ramdal
43

Dimungkinkan juga untuk menggunakan Google Apps Script untuk mencapai penyortiran data otomatis di tempat.

Ini mungkin lebih sulit untuk dicapai dan lebih rentan kesalahan (saya masih akan mencari solusi William Jackson, +1 BTW), tapi saya pikir itu cukup menarik untuk ditampilkan.

Saya memiliki lembar yang terlihat seperti ini:

lembar penyortiran otomatis

Saya menambahkan skrip baru, menggunakan langkah-langkah ini:

  • di menu, buka Tools -> Script Editor ...
  • pilih Buat proyek baru
  • di jendela kode kosong yang muncul, rekatkan kode berikut, yang akan dijalankan secara otomatis setiap kali sel diedit:

    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 } );
      }
    }
    
  • kembali ke sheet dan mulai bermain-main dengan nilai-nilai untuk melihat tabel secara otomatis setiap kali

catatan:

Dalam skrip di atas,

  • nilai 4mewakili indeks kolom D ( Valuekolom - pada yang akan diurutkan)
  • nilai "B3:E9"mewakili rentang tabel (tidak termasuk baris tajuk)

Tabel Anda kemungkinan besar akan berbeda dari milik saya, sehingga nilai-nilai ini harus disesuaikan.

Cristian Lupascu
sumber
Saya mencoba fungsi [edit] milik Anda diEdit (event) {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 ({kolom: columnToSortBy}); }} tetapi tetap mendapatkan kesalahan: TypeError: Tidak dapat membaca properti "sumber" dari undefined. (baris 2) yang merupakan kode berikut: var sheet = event.source.getActiveSheet (); ada ide? NM, hanya mendapatkan kesalahan saat menjalankan dari halaman skrip, tetapi berfungsi dengan baik pada spreadshee yang sebenarnya
drizzt09
tetapi terus mendapatkan kesalahan: TypeError: Tidak dapat membaca properti "sumber" dari undefined. (baris 2) yang merupakan kode berikut: var sheet = event.source.getActiveSheet (); ada ide? NM, hanya mendapatkan kesalahan saat menjalankan dari halaman skrip, tetapi berfungsi dengan baik pada spreadsheet yang sebenarnya. Sekarang pertanyaan ... AZ penyortirannya, bagaimana cara mengubahnya ke auto-sortir ZA? terima kasih
drizzt09
@ drizzt09 Saat Anda memanggil metode yang mungkin Anda tentukan nulluntuk eventparameter, yang jika tidak diisi dengan benar oleh infrastruktur Google Spreadsheet saat peristiwa nyata dipicu.
Cristian Lupascu
3
@ drizzt09 untuk mengubah urutan, mengubah range.sortbaris seperti ini: range.sort( { column : columnToSortBy, ascending: false } ); . Untuk opsi penyortiran lainnya, lihat developers.google.com/apps-script/class_range#sort
Cristian Lupascu
@ w0lf Terima kasih yang bekerja dengan sempurna. sekarang saya ingin menambahkannya atau memiliki fungsi terpisah yang melakukan fungsi yang sama persis tetapi pada open atau refresh. Jadi ketika saya membuka / me-refresh lembar excel itu akan secara otomatis mengurutkan kolom ke-4 turun sama seperti ketika saya mengedit kode di kolom 4 dengan kode Anda saat ini. Terima kasih
10

Berikut ini skrip generik yang akan autosort berdasarkan kolom 1, dan mengasumsikan baris Header.

Untuk membuat skrip:

  • Di menu, pergi ke Alat -> Editor Skrip ...

Di jendela kode kosong, tempel kode berikut, yang akan berjalan secara otomatis setiap kali sel diedit:

 // 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
sumber
3
Saya menemukan saya harus var sheet = SpreadsheetApp.getActiveSpreadsheet();bukannya apa yang ada di sini.
dldnh
Ini berfungsi dengan baik, tetapi bagaimana saya bisa mengedit ini sehingga hanya mengurutkan pada satu lembar dalam dokumen?
moobot
sepertinya tidak berfungsi
shadowz1337
7

Opsi lain tanpa skrip adalah:

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

Rentang dibatasi (A1: C3) karena di mana urutan naik entri kosong akan muncul terlebih dahulu.

kacang
sumber
4
Bisakah Anda memberi tahu saya di mana saya harus meletakkan ini?
Louis Tran
1
Anda dapat menggunakan SELECT * WHERE C <> '' ORDER BY Cuntuk mengabaikan entri kosong, maka Anda dapat menggunakan rentang yang cukup besar untuk memasukkan semua baris saat ini dan di masa depan.
Guss
0

Menggunakan solusi skrip, tetapi urutkan lebih dari satu kolom

Saya ingin mengurutkan berdasarkan kolom menu dropdown dan kemudian berdasarkan tanggal.

Untuk melakukannya, ubah baris "range.sort" dari cuplikan kode Cristian atau geekspotz seperti:

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

Perbedaannya adalah menambahkan tanda kurung lurus di sekitar seluruh pernyataan (array) Anda dan memisahkan jenis dengan koma.

Modifikasi kode penyortiran diambil dari Serge's Stack Overflow, jawab di sini : Penyortiran Otomatis Pada Lembar

struktur dalam
sumber