Làm cách nào tôi có thể tạo một số dữ liệu trên Google Sheets tự động sắp xếp?


57

Giả sử tôi muốn Google Sheets sắp xếp tự động một số dữ liệu, ví dụ như cột C.

Làm thế nào để làm điều đó?

Tôi biết rằng tôi có thể tự sắp xếp dữ liệu bằng cách nhấp chuột phải và chọn Sắp xếp dữ liệu , nhưng đây không phải là thứ tôi đang tìm kiếm.

Câu trả lời:


51

Bạn có thể sử dụng các sort()chức năng cho rằng, nhưng bạn phải có dữ liệu của bạn ở một nơi, và một bản sao tự động sắp xếp dữ liệu ở nơi khác.

Ví dụ: giả sử tôi có Sheet1 với dữ liệu của mình:

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

Sau đó, trong Sheet2, ô A1, tôi sẽ đặt hàm này:

= sort (Trang tính 1! A: C, 3, TRUE)

Điều này sẽ hiển thị dữ liệu của tôi, nhưng được sắp xếp theo cột C (cột thứ ba), tăng dần.

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

Thông số phải được phân cách bằng dấu chấm phẩy ;ví dụ= sort(Sheet1!A:C; 3; TRUE)

2
@Petr Nó hoạt động tốt với tôi với dấu phẩy.
William Jackson

6
@ user17634: Điều đó phụ thuộc vào cài đặt ngôn ngữ của bạn.
Vidar S. Ramdal

42

Cũng có thể sử dụng Tập lệnh Google Apps để tự động sắp xếp dữ liệu tại chỗ.

Điều này có thể khó đạt được hơn và dễ bị lỗi hơn (tôi vẫn sẽ tìm giải pháp của William Jackson, +1 BTW), nhưng tôi nghĩ rằng nó đủ thú vị để thể hiện.

Tôi có một tờ trông như thế này:

bảng phân loại tự động

Tôi đã thêm một tập lệnh mới, sử dụng các bước sau:

  • trong menu, đi đến Công cụ -> Trình chỉnh sửa tập lệnh ...
  • chọn Tạo một dự án mới
  • trong cửa sổ mã trống xuất hiện, dán đoạn mã sau sẽ tự động chạy bất cứ khi nào một ô được chỉnh sửa:

    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 } );
      }
    }
    
  • quay lại trang tính và bắt đầu chơi xung quanh với các giá trị để xem bảng sắp xếp tự động mỗi lần

Ghi chú:

Trong đoạn script trên,

  • giá trị 4đại diện cho chỉ số của cột D ( Valuecột - sắp được sắp xếp)
  • giá trị "B3:E9"đại diện cho phạm vi bảng (không bao gồm hàng tiêu đề)

Bảng của bạn rất có thể sẽ khác với bảng của tôi, vì vậy những giá trị này cần được điều chỉnh cho phù hợp.


Tôi đã thử chức năng [đã chỉnh sửa] của bạn trênEdit (event) {var sheet = event.source.getActiveSheet (); var đã chỉnh sửaCell = sheet.getActiveCell (); var cộtToSortBy = 4; var bảngRange = "A2: F99"; if (editCell.getColumn () == cộtToSortBy) {var Range = sheet.getRange (tableRange); phạm vi.sort ({cột: cộtToSortBy}); }} nhưng tiếp tục gặp lỗi: TypeError: Không thể đọc "nguồn" thuộc tính từ không xác định. (dòng 2) là mã sau: var sheet = event.source.getActiveSheet (); có ý kiến ​​gì không NM, chỉ gặp lỗi khi chạy từ trang script, nhưng nó hoạt động chính xác trên
lây lan

nhưng tiếp tục gặp lỗi: TypeError: Không thể đọc "nguồn" thuộc tính từ không xác định. (dòng 2) là mã sau: var sheet = event.source.getActiveSheet (); có ý kiến ​​gì không NM, chỉ nhận được lỗi khi chạy từ trang script, nhưng nó hoạt động đúng trên bảng tính thực tế. Bây giờ câu hỏi ... AZ sắp xếp của nó, làm cách nào để thay đổi nó thành ZA tự động sắp xếp? cảm ơn
Drizzt09

@ Drizzt09 Khi bạn gọi phương thức mà bạn có thể chỉ định nullcho eventtham số, cơ sở hạ tầng Bảng tính Google được đặt đúng cách khi một sự kiện thực sự được kích hoạt.
Cristian Lupascu

3
@ Drizzt09 để thay đổi thứ tự sắp xếp, thay đổi range.sortdòng như thế này : range.sort( { column : columnToSortBy, ascending: false } ); . Để biết thêm các tùy chọn sắp xếp, hãy xem developers.google.com/apps-script/
class_range#sort

@ w0lf Cảm ơn bạn đã làm việc hoàn hảo. bây giờ tôi muốn thêm vào nó hoặc có một chức năng riêng biệt thực hiện cùng một chức năng nhưng khi mở hoặc làm mới. Vì vậy, khi tôi mở / làm mới bảng excel, nó sẽ tự động sắp xếp cột thứ 4 giảm dần giống như khi tôi chỉnh sửa mã trong cột 4 bằng mã hiện tại của bạn. Cảm ơn

10

Đây là một tập lệnh chung sẽ tự động sửa đổi dựa trên cột thứ nhất và giả sử một hàng Tiêu đề.

Để tạo một tập lệnh:

  • Trong menu, đi đến Công cụ -> Trình chỉnh sửa tập lệnh ...

Trong cửa sổ mã trống, dán mã sau, mã này sẽ tự động chạy bất cứ khi nào một ô được chỉnh sửa:

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

3
Tôi thấy tôi phải var sheet = SpreadsheetApp.getActiveSpreadsheet();thay vì những gì ở đây.
dldnh

Điều này hoạt động rất tốt, nhưng làm thế nào tôi có thể chỉnh sửa nó để nó chỉ sắp xếp trên một trang tính trong tài liệu?
moobot

dường như không hoạt động
Shadowz1337

6

Một tùy chọn khác không có tập lệnh là:

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

Phạm vi bị hạn chế (A1: C3) vì trong đó thứ tự tăng dần các mục trống sẽ xuất hiện đầu tiên.


4
Bạn có thể vui lòng cho tôi biết tôi nên đặt cái này ở đâu không?
Louis Trần

1
Bạn có thể sử dụng SELECT * WHERE C <> '' ORDER BY Cđể bỏ qua các mục trống, sau đó bạn có thể sử dụng một phạm vi đủ lớn để bao gồm tất cả các hàng hiện tại và tương lai.
Guss

0

Sử dụng giải pháp tập lệnh, nhưng sắp xếp trên nhiều cột

Tôi muốn sắp xếp theo một cột menu thả xuống và sau đó theo ngày.

Để làm như vậy, hãy sửa đổi dòng "Range.sort" của một trong các đoạn mã của Cristian hoặc geekspotz như sau:

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

Sự khác biệt là thêm các dấu ngoặc thẳng xung quanh toàn bộ câu lệnh (mảng) của bạn và phân tách các loại bằng dấu phẩy.

Sắp xếp sửa đổi mã được lấy từ câu trả lời Stack Overflow của Serge tại đây : Sắp xếp tự động trên trang tính


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.