根据日期归档/将 A 列中的所有值复制到 C 列

archiving / copying all the values in column A to column C based on date

根据日期将 A 列中的所有值归档/复制到 C 列。此外,如果日期发生变化,将复制一组新值,而以前的值将不会 deleted.I 在每个员工的每日时间表上工作,同时将记录为他们的出勤率在日期上。有人可以帮助我吗?

Example 1

Example 2 : if I change the date, the previous record won't get deleted and will copy a new set of values based on date

如果我按下(保存按钮),我希望根据列 C1

上的日期将列 B2:B4 中的所有值复制到列 F2:F4

第二个屏幕截图显示,如果我更改日期并再次按下(保存按钮),不会删除之前的值,并且会根据 C1 列中的实际日期复制一组新值

为了解决您的问题,我建议您使用 Apps 脚本并编写脚本并使用此功能:

function dateFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var currDate = sheet.getRange("C1").getValue();
  var originRange = sheet.getRange("B2:B4");
  var headers = sheet.getDataRange().getValues()[0];
  var dateFound = false;

  for (var i=5; i<headers.length && !dateFound; i++) {
    if (currDate.toString() == headers[i].toString()) {
      originRange.copyTo(sheet.getRange(2, i + 1, 3));
      dateFound = true;
    }
  }

  if (!dateFound)
    SpreadsheetApp.getUi().alert("Date not found!");  
}

该脚本通过收集您 headers 中的所有日期来工作,并将尝试查看是否与 C1 单元格中的日期匹配。如果找到匹配项,将相应地复制值,否则,将显示一个警告提示,指出没有找到日期。

现在,您需要 link 将此功能添加到 按钮 以便仅在您单击它时执行。

您可以通过插入 绘图 和 shape/draw 来轻松做到这一点,这样它就会像您喜欢的按钮一样。您必须保存并关闭它。

然后,当你右键单击它时,会出现分配脚本选项,你必须将上面的函数名称放在那里,如下所示:

所以现在,每次按下保存按钮,脚本都会被执行。

此外,我建议您阅读以下 link,因为它们可能对您有所帮助:

  1. Apps Script Spreadsheet Service;

  2. Sheet Class .getDataRange();

  3. Range Class .copyTo().