根据 3 列之间的匹配移动行

Move Rows based on matches between 3 columns

我的目标是将 数据 选项卡中的条目、名字、姓氏和出生日期与另一个名为 [=27 的选项卡上的相同列进行比较=]完成并从数据选项卡中删除匹配行。

在另一个选项卡上标记一个复选框 New Cases 应该可以找到 Data 上的行,将该行移动到 Completed ,并清除 New Cases 上的复选框。

https://docs.google.com/spreadsheets/d/1sVVzW4Ga6XzYrGS-7AqwdMCqeL1-IxzRVSHG2FxMCog/edit?usp=sharing

我找到了几个接近我想要的脚本,并将它们复制到 sheet,但我没有专业知识来获得任何一个 (Move row based on cell selection) or (https://support.google.com/docs/thread/39992635?msgid=40432488) 来完成解决方案.

我能够让这样的东西工作,但它只工作了一次,而且我只能让它从(新案例)移动一行到(已完成)。

function onEdit(event) {
// assumes source data in sheet named New Cases
// target sheet of move to named     Completed
// getColumn with check-boxes is currently set to colu 21 or V
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();

if(s.getName() == "New Cases" && r.getColumn() == 21 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Completed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}

编辑:我正在尝试从“数据”中获取任何行,其中 C、D 和 E 列与“已完成”中的任何行匹配,以自动删除“数据”sheet。

然后,当 V 列中的“新案例”复选框被选中时,它将匹配行从“数据”移至“已完成”并取消选中“新案例”复选框,以便为下一个条目做好准备.

Select 新案例上的复选框查找数据上的行将数据行移动到已完成

删除数据行并重置新案例的复选框。

function onEdit(e) {
  const nsh = e.range.getSheet();
  if (nsh.getName() == "New Cases" && e.range.columnStart == 22 && e.range.rowStart > 1 && e.value() == "TRUE") {
    const nrg = nsh.getRange(e.range.rowStart, 1, 1, nsh.getLastColumn());
    const nvs = nrg.getValues().flat();//row
    const dsh = e.source.getSheetByName("Data");
    const dvs = dsh.getRange(2, 1, dsh.getLastRow() - 1, dsh.getLastColumn()).getValues();
    const csh = e.source.getSheetByName("Completed");
    const tgt = csh.getRange(csh.getLastRow() + 1, 1);
    for (let i = 0; i < dvs.length; i++) {
      if (dvs[i][2] == nvs[2] && dvs[i][3] == nvs[3] && dvs[i][4] == nvs[4]) {
        let drg = dsh.getRange(i + 1, 1, 1, dsh.getLastColumn());
        drg.copyTo(tgt);
        dsh.deleteRow(i + 1);
        break;
      }
    }
    e.range.setValue("FALSE");//reset the checkbox
    //e.range.offset(0,1).setValue(new Date());//you should consider doing this so that you know that it has been moved.  The way it setup now it would put the timestamp in column W
  }
}