Làm cách nào để di chuyển một hàng từ trang tính này sang trang tính khác trong trang tính?

Khi chúng tôi làm việc nhiều hơn với bảng tính, chúng tôi sẽ phát hiện ra rằng các cài đặt vị trí và kích thước mặc định như vậy không phải lúc nào cũng phù hợp với các loại nội dung ô khác nhau

Chúng tôi có thể được yêu cầu sắp xếp lại bảng của mình bằng cách di chuyển xung quanh một hoặc nhiều hàng của bảng tính. Có một cách đơn giản để làm điều này;

Cách chuyển đổi cột và hàng trong Google Sheets

  • Chúng tôi bắt đầu bằng cách chọn các hàng mà chúng tôi muốn di chuyển và sau đó trên menu Google Trang tính của mình, chúng tôi nhấp vào nút “Chỉnh sửa” > “Di chuyển hàng lên hoặc xuống”;

Làm cách nào để di chuyển một hàng từ trang tính này sang trang tính khác trong trang tính?
Hình 2. Di chuyển hàng trong Google Trang tính

Bây giờ chúng ta có thể chọn hàng đã chỉ định rồi kéo và thả hàng đó vào vị trí cần thiết. Bằng cách này, chúng tôi có thể di chuyển các hàng trên Google trang tính lên và xuống. Tiếp theo, chúng tôi sẽ trình bày cách thay đổi chiều cao hàng trong Google trang tính ;

Chúng tôi có thể nâng cao bố cục bảng của mình bằng cách thay đổi chiều cao hàng trong Google trang tính .

Đây là một cách đơn giản để làm điều đó

Cho phép con trỏ di chuột qua viền dưới của hàng bảng tính mà chúng tôi muốn thay đổi kích thước và khi nó thay đổi thành một cuộn có Mũi tên Lên/Xuống, chúng tôi có thể nhấp và .

Làm cách nào để di chuyển một hàng từ trang tính này sang trang tính khác trong trang tính?
Hình 3. Điều chỉnh chiều cao hàng trong Google Trang tính

Tiếp theo, chúng tôi sẽ trình bày cách thay đổi kích thước ô trong Google trang tính .

  • Nhấp vào menu ngữ cảnh ở góc trên cùng bên phải của bảng tính của chúng tôi. Nhấp chuột phải vào hàng chúng tôi muốn thay đổi kích thước và chọn tùy chọn “Thay đổi kích thước hàng”;

Làm cách nào để di chuyển một hàng từ trang tính này sang trang tính khác trong trang tính?
hinh 4. Thay đổi kích thước hàng trong Google Trang tính

Chúng tôi có thể thay đổi chiều cao hàng trong Google trang tính bất cứ khi nào chúng tôi muốn có các dòng khác nhau có chiều cao tương tự trong trang tính của mình. Chỉ cần chọn tất cả chúng để thực hiện thay đổi thông qua menu ngữ cảnh.

Kết nối tức thì với một chuyên gia Excel

Hầu hết thời gian, vấn đề bạn cần giải sẽ phức tạp hơn một ứng dụng đơn giản của công thức hoặc hàm. Nếu bạn muốn tiết kiệm hàng giờ nghiên cứu và sự thất vọng, hãy dùng thử dịch vụ Excelchat trực tiếp của chúng tôi. Các chuyên gia Excel của chúng tôi luôn sẵn sàng 24/7 để trả lời bất kỳ câu hỏi nào về Excel mà bạn có thể có. Chúng tôi đảm bảo kết nối trong vòng 30 giây và giải pháp tùy chỉnh trong vòng 20 phút.

Bạn muốn tác vụ được tự động chuyển sang một trang tính khác có tên là “Hoàn thành” khi ô Trạng thái được thay đổi thành “Hoàn thành”

Có thể sử dụng bộ lọc hoặc truy vấn để bắt chước những gì được mong đợi. Nhưng khi bạn thực sự muốn dữ liệu của mình được di chuyển vật lý, bộ lọc hoặc truy vấn có thể không hoạt động tốt

Để đạt được điều đó, giải pháp là sử dụng Google Apps Script

Chỉ cần di chuyển hàng

Điều đầu tiên bạn nên quan tâm là kích hoạt, đây là điểm bắt đầu của toàn bộ quá trình tự động hóa. Về cơ bản khi một số điều nhất định xảy ra, Google trang tính sẽ phát ra một số sự kiện để kích hoạt tập lệnh do người dùng xác định nếu có

Có nhiều loại trình kích hoạt khác nhau có thể xử lý các tình huống khác nhau. Để đơn giản, chúng tôi sẽ sử dụng trình kích hoạt chỉnh sửa mặc định sẽ được kích hoạt bất cứ khi nào trang tính được chỉnh sửa thủ công

Dưới đây là đoạn mã để hoàn thành nhiệm vụ. Tất cả những gì bạn cần làm là sao chép tập lệnh vào trình chỉnh sửa tập lệnh của mình (có thể mở qua Tiện ích mở rộng -> Tập lệnh ứng dụng)

function onEdit(e){
    var sourceSheet = e.range.getSheet();
    if(sourceSheet.getSheetName() === 'Todo'){
        var row = e.range.getRow();
        var rowRange = sourceSheet.getRange(row, 1, 1, sourceSheet.getLastColumn());
        var rowValues = rowRange.getValues()[0];
        if(rowValues[0] === "Done"){
            var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Done");  
            targetSheet.appendRow(rowValues);  
            sourceSheet.deleteRow(row);
        }
    } 
}

Kịch bản khá tự giải thích. Chỉ cần một vài điều cần lưu ý

  1. if(sourceSheet.getSheetName() === 'Todo') kiểm tra tên của trang nguồn. Nếu không, các sự kiện từ các trang tính khác có thể kích hoạt việc di chuyển, đây là điều không mong muốn

  2. rowRange.getValues()[0] nhận các giá trị của hàng dưới dạng dữ liệu được trả về bởi rowRange. getValues() là một mảng hai chiều

  3. if(rowValues[0] === "Done") kiểm tra xem giá trị của cột trạng thái có phải là “Hoàn thành” không. Lưu ý cột trạng thái ở đây là phần tử đầu tiên của mảng. Nếu cột ở vị trí khác thì nên thay đổi cho phù hợp

  4. Nếu bạn chỉ muốn sao chép hàng sang trang tính khác, dòng mã cuối cùng sẽ được ghi chú

Di chuyển hàng lùi

Một yêu cầu khác là di chuyển hàng về phía sau nếu trạng thái được thay đổi từ “Xong” thành “Việc cần làm”

Điều này có thể dễ dàng thực hiện bằng cách sao chép tập lệnh và sửa đổi điều kiện một chút

function onEdit(e){
    var sourceSheet = e.range.getSheet();
    var row = e.range.getRow();
    if(sourceSheet.getSheetName() === 'Todo'){
        var rowRange = sourceSheet.getRange(row, 1, 1, sourceSheet.getLastColumn());
        var rowValues = rowRange.getValues()[0];
        if(rowValues[0] === "Done"){
            var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Done");  
            targetSheet.appendRow(rowValues);  
            sourceSheet.deleteRow(row);
        }
    } 

    if(sourceSheet.getSheetName() === 'Done'){
        var rowRange = sourceSheet.getRange(row, 1, 1, sourceSheet.getLastColumn());
        var rowValues = rowRange.getValues()[0];
        if(rowValues[0] !== "Done"){
            var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Todo");  
            targetSheet.appendRow(rowValues);  
            sourceSheet.deleteRow(row);
        }
    } 
}

Tập lệnh chắc chắn có thể được cải thiện vì sao chép mã là một thứ gì đó không lành mạnh. Bạn nên tránh trùng lặp quá nhiều để bảo trì dễ dàng. Nhưng đây không phải là trọng tâm của bài viết

Di chuyển hàng lên trên cùng

Đoạn script trên sẽ chỉ nối hàng vào cuối trang mục tiêu. Bạn có thể muốn hiển thị hàng đã di chuyển lên trên cùng để mọi người có thể dễ dàng nhìn thấy hoặc thậm chí chèn hàng vào một vị trí nhất định

Ví dụ: hãy nâng cao một chút tập lệnh để chèn hàng làm hàng thứ hai, tôi. e. , sau hàng tiêu đề

function onEdit(e){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sourceSheet = e.range.getSheet();
    if(sourceSheet.getSheetName() === 'Todo'){
        var row = e.range.getRow();
        var rowRange = sourceSheet.getRange(row, 1, 1, sourceSheet.getLastColumn());
        var rowValues = rowRange.getValues()[0];
        if(rowValues[0] === "Done"){
            var targetSheet = ss.getSheetByName("Done");
            targetSheet.insertRowAfter(1);  
            var targetRange = targetSheet.getRange(2, 1);
            rowRange.copyTo(targetRange); 
            sourceSheet.deleteRow(row);
        }     
    } 
}

Giải thích về mã đã thay đổi

  1. targetSheet.insertRowAfter(1); tạo một hàng trống ngay sau hàng đầu. Bạn có thể thay đổi 1 thành bất kỳ số vị trí nào khác

  2. targetSheet.getRange(2, 1); lấy cột đầu tiên của hàng thứ hai, hàng mới tạo, dưới dạng phạm vi

  3. rowRange.copyTo(targetRange) sao chép dữ liệu hàng vào hàng trống

Di chuyển hàng chỉ với giá trị

Nếu không muốn sao chép định dạng của hàng, bạn có thể sử dụng hàm copyTo khác với tham số là kiểu dán

function onEdit(e){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sourceSheet = e.range.getSheet();
    if(sourceSheet.getSheetName() === 'Todo'){
        var row = e.range.getRow();
        var rowRange = sourceSheet.getRange(row, 1, 1, sourceSheet.getLastColumn());
        var rowValues = rowRange.getValues()[0];
        if(rowValues[0] === "Done"){
            var targetSheet = ss.getSheetByName("Done");
            targetSheet.insertRowAfter(1);
            var targetRange = targetSheet.getRange(2, 1);
            rowRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);      
            sourceSheet.deleteRow(row);
        }     
    } 
}

Có các tùy chọn khác để kiểm soát hành vi sao chép. Tham khảo CopyPasteType

Ghi chú thêm

Tập lệnh này chỉ hoạt động khi thay đổi được thực hiện trên một hàng. Khi thay đổi liên quan đến nhiều hàng, bạn nên sử dụng vòng lặp để đi qua từng hàng

Trong trường hợp này, việc xóa hàng sẽ hơi phức tạp vì chỉ mục của hàng có thể bị ảnh hưởng sau mỗi lần xóa. Vì vậy, bạn nên xóa chúng từ dưới lên

Nếu bạn muốn thực hiện các hành vi nâng cao hơn, bạn có thể tham khảo API google sheet và nâng cao dần tập lệnh để nó hoạt động như ý muốn

Cách thực hiện với Sheet Automation

Cuối cùng, hãy xem cách thực hiện những điều trên với Tự động hóa trang tính. Tất cả những gì bạn cần làm là tạo quy tắc tự động hóa với một vài phần

Làm cách nào để di chuyển một hàng từ trang tính này sang trang tính khác trong trang tính?

Đầu tiên, tạo trình kích hoạt

function onEdit(e){
    var sourceSheet = e.range.getSheet();
    var row = e.range.getRow();
    if(sourceSheet.getSheetName() === 'Todo'){
        var rowRange = sourceSheet.getRange(row, 1, 1, sourceSheet.getLastColumn());
        var rowValues = rowRange.getValues()[0];
        if(rowValues[0] === "Done"){
            var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Done");  
            targetSheet.appendRow(rowValues);  
            sourceSheet.deleteRow(row);
        }
    } 

    if(sourceSheet.getSheetName() === 'Done'){
        var rowRange = sourceSheet.getRange(row, 1, 1, sourceSheet.getLastColumn());
        var rowValues = rowRange.getValues()[0];
        if(rowValues[0] !== "Done"){
            var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Todo");  
            targetSheet.appendRow(rowValues);  
            sourceSheet.deleteRow(row);
        }
    } 
}
0 trên cột A của trang tính Todo. Bạn có thể theo dõi nhiều cột ở đây

Làm cách nào để di chuyển một hàng từ trang tính này sang trang tính khác trong trang tính?

Sau đó, tạo Điều kiện cột để kiểm tra xem giá trị từ cột A có phải là “Xong” không

Làm cách nào để di chuyển một hàng từ trang tính này sang trang tính khác trong trang tính?

Tạo hành động cuối cùng để di chuyển hàng sang trang tính Xong với các tùy chọn thích hợp

Làm cách nào để di chuyển một hàng từ trang tính này sang trang tính khác trong trang tính?

Khi quy tắc tự động hóa được lưu, nó sẽ sẵn sàng phản ứng với thay đổi được thực hiện đối với cột A. Không có phép thuật mặc dù. Nó chỉ thực hiện những gì mà các tập lệnh trên làm, theo cách dễ dàng hơn nhiều