我正在使用Google电子表格。
为了说明我的问题,我使用范围A2:A8
进行D2
和E2
的数据验证。
但是因为在单元格D2
中,您应该只选择一只动物,我想用B2:B8
过滤范围。
我尝试过的是使用我自己的公式:
=FILTER(A2:A8;IS("B2:B8";"ANIMAL"))
但这不会起作用,我无法选择"下拉"如果我使用自定义公式,则选项。
我也在我的范围选择中尝试了我的公式,但它无效。使用过滤数据下拉列表的正确公式是什么?
有什么想法吗?
答案 0 :(得分:18)
按照目前的情况,在Google表格中,原生(即不使用Google Apps脚本)填充下拉列表的唯一方法是使用以逗号分隔的列表或参考范围。因此,在您的情况下,您需要在电子表格中重现已过滤的列表某处(可能在隐藏的工作表上):
=FILTER(A2:A8;B2:B8="ANIMAL")
然后在数据验证中引用该输出的范围。
使用公式直接生成下拉列表的能力将是一个强大的功能,并且已经被许多人提交为功能请求(您可能希望这样做:帮助菜单,报告问题)。
答案 1 :(得分:0)
添加上面的答案,提供了更多方法来实现这一目标。
另一个选项是使用查询公式创建列。例如:
= QUERY(A:B, "SELECT A WHERE B = 'ANIMAL'", 0)
答案 2 :(得分:0)
There is a solution使用Google Apps脚本。
整洁的视频介绍了所有涉及的机制:
基本上,通过编辑下拉列表所依赖的任何单元格(例如,“国家/地区用于城市”列表),对于相关的“城市”单元格,它将自动重新计算验证数据的范围(可能的城市列表)。
在此处复制/粘贴脚本以防万一它不可用(该示例使用的汽车的型号和型号用于依赖的下拉菜单):
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);
}
}
}
答案 3 :(得分:0)
=QUERY(A:B, "SELECT A WHERE B = 'ANIMAL'", 0)
可能被证明比以前的学分更具扩展性。
=QUERY(A:B, CONCATENATE("SELECT A WHERE B = '" , G3 "'", 0) )
对于某些用途,可能被证明具有足够的可扩展性。