我正在使用Google电子表格。
为了说明我的问题,我使用范围A2:A8
对D2
和E2
的数据验证。
但由于在单元格D2
中,您只能选择一个动物,因此我想使用B2:B8
过滤该范围。
我尝试过的是使用自己的公式:
=FILTER(A2:A8;IS("B2:B8";"ANIMAL"))
但是如果我使用自定义公式,这样做是行不通的,我也无法选择“下拉菜单”选项。
我还尝试在我的范围选择中使用公式,但它无效。有什么正确的公式可以使用来显示带有过滤数据的下拉菜单呢?
你有什么想法吗?
我正在使用Google电子表格。
为了说明我的问题,我使用范围A2:A8
对D2
和E2
的数据验证。
但由于在单元格D2
中,您只能选择一个动物,因此我想使用B2:B8
过滤该范围。
我尝试过的是使用自己的公式:
=FILTER(A2:A8;IS("B2:B8";"ANIMAL"))
但是如果我使用自定义公式,这样做是行不通的,我也无法选择“下拉菜单”选项。
我还尝试在我的范围选择中使用公式,但它无效。有什么正确的公式可以使用来显示带有过滤数据的下拉菜单呢?
你有什么想法吗?
通过简洁的视频讲解所有涉及的机制:
基本上,通过编辑任何一个下拉列表依赖的单元格(例如城市列表的国家),对于相关的“城市”单元格,它将自动重新计算验证数据范围(可能的城市列表)。
为了防止脚本不可用,这里复制/粘贴了脚本(该示例使用了汽车的品牌和型号作为依赖下拉列表):
function onEdit() {
var tabLists = "lists";
var tabValidation = "Main";
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabLists);
var activeCell = ss.getActiveCell();
if (activeCell.getColumn() == 1 && activeCell.getRow() > 1 && ss.getSheetName() == tabValidation){
activeCell.offset(0, 1).clearContent().clearDataValidations();
var makes = datass.getRange(1, 1, 1, datass.getLastColumn()).getValues();
var makeIndex = makes[0].indexOf(activeCell.getValue()) + 1;
if (makeIndex != 0){
var validationRange = datass.getRange(3, makeIndex, datass.getLastRow());
var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
activeCell.offset(0, 1).setDataValidation(validationRule);
}
}
}
除了上面的答案,还有其他几种方法可以实现这个目标。
另一种选择是使用查询公式创建列。例如:
= QUERY(A:B, "SELECT A WHERE B = 'ANIMAL'", 0)
=QUERY(A:B, "SELECT A WHERE B = 'ANIMAL'", 0)
可能比之前所认为的更具可扩展性。
=QUERY(A:B, CONCATENATE("SELECT A WHERE B = '" , G3 "'", 0) )
可能对某些用途具有可扩展性。