我正在尝试设置动态,相关的下拉数据验证列表。目的是当我从A列的列表中选择一项时,B列的下拉列表将自动更改以反映可能的选项。
即使我是编码的新手,我也设法使这部分工作在我想要的工作表上。
但是,当我在另一张纸上进行任何更改时,也会对另一张纸进行更改。我需要此脚本仅在1张纸上工作,无法弄清楚如何。
似乎人们在这里遇到了类似的问题,但是我无法根据他们的情况调整他们的解决方案。
我也尝试过用我想要更改的工作表将getActiveSheet替换为getSheetByName,但它似乎不起作用。
function onEdit() {
var activecell = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveCell();
var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sectors");
if(activecell.getColumn() == 3 && activecell.getRow() >1 ) {
activecell.offset(0, 1).clearContent().clearDataValidations();
if(activecell.isBlank()){
}
var sector1 = datass.getRange(1, 1, 1, datass.getLastColumn()).getValues();
var sector1Index = sector1[0].indexOf(activecell.getValue()) +1 ;
var validationRange1 = datass.getRange(2, sector1Index, 25);
var validationRule1 = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange1);
activecell.offset(0, 1).setDataValidation(validationRule1)
}
}
当我在另一张纸上进行任何更改时,它也会对该另一张纸进行更改。我需要此脚本仅在1张纸上工作,无法弄清楚如何。
谢谢
答案 0 :(得分:0)
不确定这是否对您有帮助,但过去我结合使用了数据验证规则和过滤器公式来获得类似的结果。我的解决方案未使用App Script,但它可能是解决问题的更简单方法。就我而言,我使用了三张单独的纸。
基本上,您正在使用Sheet1上第一个下拉列表中的输入来过滤Sheet2上的数据,并使用Sheet2上的过滤后的数据来填充下一个下拉列表的选择。
我已经链接了一个表格,该表格用示例数据演示了这个概念。
请注意“ FILTER”!A3和“ FILTER”!B3中的过滤器公式,它们是完成此工作的关键。然后,在单元格“ VIEW!A2”和“ VIEW!B2”上设置数据验证规则,以分别从范围“ FILTER”!A2:A和“ FILTER”!B2:B中进行选择。
我在每个过滤器列的顶部都包含标记为“ SHOW ALL”的静态值,这些值允许用户将该列设置为通配符。根据您的用例,这可能有用也可能没有用。
请注意,如果使用了这些值,则需要在过滤器公式中对这些值进行调节。我使用IF语句,该语句显示在相应列中找到相反变量的所有值。
很抱歉,如果这是一种过于简化(或复杂)的方法,但我希望它会有所帮助。我使用类似的配置来支持非常大的数据集,并且它们通常易于管理。
https://docs.google.com/spreadsheets/d/1GpvSVRmXLkrtr2VFZmxyZXQjLWK8nrt3DvpNc6spLDg/edit?usp=sharing