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

ray*_*nco 19 spreadsheet formula google-sheets

我正在使用Google电子表格.

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

在此输入图像描述

但是因为在细胞中D2,你应该只选择一种动物,我想用它来过滤范围B2:B8.

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

=FILTER(A2:A8;IS("B2:B8";"ANIMAL"))
Run Code Online (Sandbox Code Playgroud)

但这不起作用,如果我使用自定义公式,我不能选择"下拉"选项.

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

有什么想法吗?

Ada*_*amL 20

就目前而言,在Google表格中,本地化(即不使用Google Apps脚本)填充下拉列表的唯一方法是使用以逗号分隔的列表或引用范围.因此,在您的情况下,您需要在电子表格中的某个位置重现已过滤的列表(可能在隐藏的工作表上):

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

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

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

  • 这是一个智能而简单的解决方案,谢谢.和@pnuts,是的,你是;) (2认同)

Fro*_*y Z 5

有一个使用 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);
     }  
  }
}
Run Code Online (Sandbox Code Playgroud)