我有两张纸用于跟踪建筑项目。
在第一张表格中,任务列表包含在时间表中,其中包含成本预测等。任务类似于以下内容:
第二张纸用于跟踪单个购买,每个购买与来自第一张纸的任务(例如,切割混凝土)相关联。它看起来像下面这样:
DATE PAYEE ITEM CATEGORY COST
----- ---------- ---------- -------- ------
10/25 Home Depot (10) 2x4's Frame ▽ $54.00
使用数据验证,第二个工作表中的“类别”下拉列表引用第一个工作表中的项目列表。这很完美。这是问题......
如果我更改第一张纸上的项目(例如,“Frame”为“Framing”),虽然下拉列表已更新,但任何先前输入的行(如上图所示)只显示验证错误(即,细胞右角的红色指示器)。
由于建筑项目可以轻松购买数百个项目,而非手动查找数据验证错误,是否有办法更新第二个工作表的值?例如......
答案 0 :(得分:1)
根据我在问题中提到的我喜欢的可能性,我想出了如何编写一个在从下拉列表中选择值后运行的脚本,从而用单元格引用覆盖文字值。
用户在下拉菜单中进行选择后,将运行以下脚本:
function onEdit(event){
var activeSheet = event.source.getActiveSheet();
var activeSheetName = activeSheet.getName();
var activeCell = activeSheet.getActiveCell();
var activeColumn = activeCell.getColumn();
if (activeSheetName == "Envelope (Spent)" && activeColumn === 4) {
var destinationCell = activeCell;
var destinationContent = destinationCell.getValue();
var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var sourceSheetName = sourceSheet.getName();
var sourceRange = sourceSheet.getRange("D:D");
var sourceValues = sourceRange.getValues();
for (var i = 0; i < sourceValues.length; i++) {
if (sourceValues[i] == destinationContent) {
var sourceRow = sourceSheet.getRange("D" + i + ":D" + i).getRow() + 1;
destinationCell
.setValue("='" + sourceSheetName + "'!D" + sourceRow)
.setNote(destinationContent)
;
}
}
}
}
为了便于在两张纸以某种方式不同步的情况下进行恢复,将从下拉列表的数据验证中导出的原始选择值作为注释插入。我认为将来清除所有笔记要比发现自己有一堆与任务来源列表不对应的条目更容易。
答案 1 :(得分:0)
Google表格中的数据验证始终会插入您输入或选择的文字,以便您无法将其链接到原始单元格。你必须通过脚本解决整个问题