function onEdit() {
var mainSheet = "Todolist";
var sheetToMoveTheRow = "Completed";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveRange();
if (sheet.getName() == mainSheet && range.getColumn() == 2 && range.getValue() == true) {
moveRow(sheet, ss.getSheetByName(sheetToMoveTheRow));
} else if (sheet.getName() == sheetToMoveTheRow && range.getColumn() == 2 && range.getValue() == false) {
moveRow(sheet, ss.getSheetByName(mainSheet));
}
}
function moveRow(sourceSheet, targetSheet) {
var row = sourceSheet.getActiveRange().getRow();
var numColumns = sourceSheet.getLastColumn();
var data = sourceSheet.getRange(row, 1, 1, numColumns).getValues();
// Insert a new row below the header (row 3)
targetSheet.insertRowBefore(3);
targetSheet.getRange(3, 1, 1, numColumns).setValues(data);
sourceSheet.deleteRow(row);
}
// Or.....
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = e.source.getActiveSheet();
var range = e.range;
var column = range.getColumn();
var isChecked = range.getValue();
var sheetsMap = { "Todolist": "Completed", "Completed": "Todolist" };
if (column === 2 && sheetsMap[sheet.getName()] !== undefined) {
moveRow(sheet, ss.getSheetByName(sheetsMap[sheet.getName()]));
}
}
function moveRow(sourceSheet, targetSheet) {
var row = sourceSheet.getActiveRange().getRow();
var numColumns = sourceSheet.getLastColumn();
var data = sourceSheet.getRange(row, 1, 1, numColumns).getValues();
targetSheet.insertRowBefore(3); // Insert new row at row 3
targetSheet.getRange(3, 1, 1, numColumns).setValues(data);
sourceSheet.deleteRow(row);
}
Untested but should he fine.