使用过滤范围创建单元格下拉列表

时间:2014-10-09 20:03:58

标签: google-sheets formula spreadsheet

我正在使用Google电子表格。

为了说明我的问题,我使用范围A2:A8进行D2E2的数据验证。

enter image description here

但是因为在单元格D2中,您应该只选择一只动物,我想用B2:B8过滤范围。

我尝试过的是使用我自己的公式:

=FILTER(A2:A8;IS("B2:B8";"ANIMAL"))

但这不会起作用,我无法选择"下拉"如果我使用自定义公式,则选项。

我也在我的范围选择中尝试了我的公式,但它无效。使用过滤数据下拉列表的正确公式是什么?

有什么想法吗?

4 个答案:

答案 0 :(得分:18)

按照目前的情况,在Google表格中,原生(即不使用Google Apps脚本)填充下拉列表的唯一方法是使用以逗号分隔的列表或参考范围。因此,在您的情况下,您需要在电子表格中重现已过滤的列表某处(可能在隐藏的工作表上):

=FILTER(A2:A8;B2:B8="ANIMAL")

然后在数据验证中引用该输出的范围。

使用公式直接生成下拉列表的能力将是一个强大的功能,并且已经被许多人提交为功能请求(您可能希望这样做:帮助菜单,报告问题)。

答案 1 :(得分:0)

添加上面的答案,提供了更多方法来实现这一目标。

  • 在A:B范围内创建一个数据透视表,在枢轴行中添加“Some Values”(请记得取消选中“Show Totals”选项),然后将“Animal”添加到过滤器,然后编辑过滤器以仅选择动物。这将产生一个动物名称列表。最后,使用此列作为数据验证规则的范围。
  • 另一个选项是使用查询公式创建列。例如:

    = 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) )   

对于某些用途,可能被证明具有足够的可扩展性。