是否有根据不同单元格的内容锁定已经具有数据验证的单元格的功能?

Is there a function to lock a cell that already has data validation, based on the contents of a different cell?

我有一个电子表格,用于跟踪游戏中所需的战利品。在 C 列中,我使用数据验证来创建可用项目的下拉菜单。 F 列包含一个带有选项 "Yes" 和 "No" 的下拉菜单,以确定该玩家是否已经收到物品。

我试图做到这一点,以便在选择 "Yes" 时,它基本上会 "lock" C 列中的相应单元格,这样就无法再对其进行编辑。如果这不可能,我至少希望它从该单元格中删除下拉菜单(但将文本内容保留在单元格中,以便我们可以看到选择了什么)。如果我需要为 "Yes" 和 "No" 使用复选框而不是下拉菜单,我对此持开放态度。

电子表格示例: https://docs.google.com/spreadsheets/d/1B8F1XFjPvABRuO2sVYvBU0UBzY2H-ftU7NU85AakiPE/edit?usp=sharing

我建议为此使用 Google Apps 脚本。您可以通过工具 > 脚本编辑器打开它。 粘贴这个,它应该可以解决问题。它删除了数据验证并仅保留选定的值。如果您更改 F 列中的某些内容,它会删除 C 中的验证等

希望对您有所帮助。

function onEdit(e) 
{

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
  var lr = sheet.getLastRow();
  var lc = sheet.getLastColumn();
  var actRange = sheet.getCurrentCell();
  var actRow = actRange.getRow();
  var value = sheet.getCurrentCell().getValue();
  var range = e.range;
  var rangeColumn = range.getColumn();

  var columnsToCheck = [6, 10, 14, 18, 22, 26]

  if (value == "Yes" &&  rangeColumn == 6)
  {
    sheet.getRange(actRow, 3).setDataValidation(null)
  }

  else if (value == "Yes" &&  rangeColumn == 10)
  {
    sheet.getRange(actRow, 7).setDataValidation(null)
  }

  else if (value == "Yes" &&  rangeColumn == 14)
  {
    sheet.getRange(actRow, 11).setDataValidation(null)
  }

  else if (value == "Yes" &&  rangeColumn == 18)
  {
    sheet.getRange(actRow, 15).setDataValidation(null)
  }

  else if (value == "Yes" &&  rangeColumn == 22)
  {
    sheet.getRange(actRow, 19).setDataValidation(null)
  }

   else if (value == "Yes" &&  rangeColumn == 26)
  {
    sheet.getRange(actRow, 23).setDataValidation(null)
  }

}