没有脚本的谷歌表格中的多个依赖下拉列表

1 javascript google-sheets google-apps-script google-query-language google-sheets-formula

我在各种情况下使用 G 表,这是一个非常频繁的用例。在这种情况下,假设电子表格如下所示: https://docs.google.com/spreadsheets/d/1PAg2Gr2T1gUmqlbAJaJjMQ37yO_YI5sYz9WMY3Q1lEg/edit ?usp=sharing

B 列中的大陆,C 列中的国家。然后,在另一张纸上,列出与给定国家/地区对应的值列表。所以我想要的是在 C 列中从大陆列表中进行选择,但在 D 列中从该大陆内的国家/地区列表中进行选择。

B 上校 | C 上校 | D 上校 |

巴黎 | 欧洲 | 法国|

我已经审查了有关如何使用脚本执行此操作的问题,但似乎无法复制它。我还想知道是否有一种快速而肮脏的方法可以使用公式或添加额外的过滤表来完成此操作。

soM*_*rio 5

您可以使用脚本或公式来完成依赖下拉列表。

谷歌应用脚​​本

单个下拉菜单:

C6在工作表的单元格中创建一个下拉列表,该列表从工作表的范围(列区域)中Data获取值。然后将以下代码复制到脚本编辑器并单击“保存”。每次您在单元格的下拉列表中选择一个新项目时,都会出现/更新一个相关下拉列表,其中包含单元格中相应国家/地区的列表。请参阅有关如何设置和使用此解决方案的说明。B3:BValuesC6D6

function onEdit(e){

    const as = e.source.getActiveSheet();
    const val = e.range.getValue();
    const val_not = e.range.getA1Notation();
    const vs = e.source.getSheetByName("Values");
    const opts = vs.getRange('B3:C' + vs.getLastRow()).getValues();
      
    if (val_not =='C6' && as.getName() == "Data"){
      
      const fopts = opts.filter(o=>o[0]==val)
      const droplist = fopts.map(o=>o[1]).sort().reverse().filter((v, i, a) => a.indexOf(v) === i);   
      const cell = as.getRange('D6');
      const rule = SpreadsheetApp.newDataValidation().requireValueInList(droplist).setAllowInvalid(false).build();
      cell.clearContent();
      cell.clearDataValidations();
      cell.setDataValidation(rule);            
    }      
  } 
  
Run Code Online (Sandbox Code Playgroud)

指示:

下拉动图


多个下拉菜单:

逻辑和之前一模一样。您需要做的唯一修改是将列中的下拉列表向上/向下拖动C到您想要具有下拉列表的单元格,然后使用此脚本:

function onEdit(e){

    const as = e.source.getActiveSheet();
    const val = e.range.getValue();  
    const row = e.range.getRow();
    const col = e.range.getColumn();
    
    const vs = e.source.getSheetByName("Values");
    const opts = vs.getRange('B3:C' + vs.getLastRow()).getValues();
      
    if (row > 2 && col == 3 && as.getName() == "Data"){
      
      const fopts = opts.filter(o=>o[0]==val)
      const droplist = fopts.map(o=>o[1]).sort().reverse().filter((v, i, a) => a.indexOf(v) === i);   
      const cell = as.getRange(row,4);
      const rule = SpreadsheetApp.newDataValidation().requireValueInList(droplist).setAllowInvalid(false).build();
      cell.clearContent();
      cell.clearDataValidations();
      cell.setDataValidation(rule);            
    }      
  } 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


谷歌表格公式

我不想在这里提供解释,这会使这篇文章比现在更长,我更愿意将您重定向到 YouTube 视频,该视频将帮助您弄清楚如何使用谷歌表格公式设置依赖下拉列表:

Google 表格 - 下拉列表,2 个从属下拉列表