I've just created a script in Google Spreadsheet in order to archive some things. I have data from four countries. If something is marked done, then that line could be archived into that country's archive. My code is pretty ugly. Is there a clearer way to do this? function CroatianArchive() { var source_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('original'); var target_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('croatian_backup'); var lastRow = source_sheet.getLastRow(); var source_range = source_sheet.getDataRange(); var target_range = target_sheet.getDataRange(); var rowsToBeDeleted = []; var i = 2; while (i <= lastRow) { if (source_sheet.getRange("A"+i).getValue() == "CRO" && source_sheet.getRange("M"+i).getValue() == "DONE" ) { var office = source_sheet.getRange("A"+i).getValue(); var title = source_sheet.getRange("B"+i).getValue(); var imdbId = source_sheet.getRange("C"+i).getValue(); var channel = source_sheet.getRange("D"+i).getValue(); var type = source_sheet.getRange("E"+i).getValue(); var added = source_sheet.getRange("F"+i).getValue(); var deadline = source_sheet.getRange("G"+i).getValue(); var airing = source_sheet.getRange("H"+i).getValue(); var link = source_sheet.getRange("I"+i).getValue(); var picture = source_sheet.getRange("J"+i).getValue(); var comment = source_sheet.getRange("K"+i).getValue(); var portId = source_sheet.getRange("L"+i).getValue(); var status = source_sheet.getRange("M"+i).getValue(); var data = [office,title,imdbId,channel,type,added,deadline,airing,link,picture,comment,portId,status]; target_sheet.appendRow(data); rowsToBeDeleted.push(i); i++; } else { i++; } } rowsToBeDeleted.reverse(); for (var j = 0; j < rowsToBeDeleted.length; j++) { source_sheet.deleteRow(rowsToBeDeleted[j]); } SpreadsheetApp.getActiveSpreadsheet().toast('Archivation finished.', 'Status'); } function SerbianArchive() { var source_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('original'); var target_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('serbian_backup'); var lastRow = source_sheet.getLastRow(); var source_range = source_sheet.getDataRange(); var target_range = target_sheet.getDataRange(); var rowsToBeDeleted = []; var i = 2; while (i <= lastRow) { if (source_sheet.getRange("A"+i).getValue() == "SER" && source_sheet.getRange("M"+i).getValue() == "DONE" ) { var office = source_sheet.getRange("A"+i).getValue(); var title = source_sheet.getRange("B"+i).getValue(); var imdbId = source_sheet.getRange("C"+i).getValue(); var channel = source_sheet.getRange("D"+i).getValue(); var type = source_sheet.getRange("E"+i).getValue(); var added = source_sheet.getRange("F"+i).getValue(); var deadline = source_sheet.getRange("G"+i).getValue(); var airing = source_sheet.getRange("H"+i).getValue(); var link = source_sheet.getRange("I"+i).getValue(); var picture = source_sheet.getRange("J"+i).getValue(); var comment = source_sheet.getRange("K"+i).getValue(); var portId = source_sheet.getRange("L"+i).getValue(); var status = source_sheet.getRange("M"+i).getValue(); var data = [office,title,imdbId,channel,type,added,deadline,airing,link,picture,comment,portId,status]; target_sheet.appendRow(data); rowsToBeDeleted.push(i); i++; } else { i++; } } rowsToBeDeleted.reverse(); for (var j = 0; j < rowsToBeDeleted.length; j++) { source_sheet.deleteRow(rowsToBeDeleted[j]); } SpreadsheetApp.getActiveSpreadsheet().toast('Archivation finished.', 'Status'); }