使用Google表格为多行创建动态下拉数据验证

时间:2018-08-02 14:48:29

标签: validation filter google-sheets

我有一个电子表格,用户可以在工作表的某些列中的多个字段中输入数据。我希望其他列具有下拉列表,这些下拉列表中的选项会根据用户在前几列中的内容进行更改。

作为一个例子,假设我有一个包含两张纸的工作簿:“ INPUT”和“ AUX”。在“输入”的A列(国家)中,用户必须从下拉列表中选择一个国家。我想对B列(城市)中的下拉列表进行更新,并仅向我显示用户在A列中输入的国家/地区中的城市列表。我希望这种情况发生在多行中。

“ INPUT”的A列通过数据验证从“ AUX”的A列中的国家列表中提取。

我可以使用过滤器功能来做我想做的事情。但是,(1)这不会给我一个下拉列表,(2)每当一个国家中有不止一个城市时,城市列表会转到下一行并阻止使用电子表格。

我建立了一个示例电子表格,可以在这里找到:https://docs.google.com/spreadsheets/d/1SPXIC4qkXRNcWNsja-_MPSjNyYlYD-1PpZ7wdl8Z098/edit?usp=sharing

在工作表中,您可以看到工作中的过滤器功能以及为什么它不能解决问题。谢谢。

1 个答案:

答案 0 :(得分:1)

几个月前,我需要在工作项目的电子表格中执行此操作,就像您一样,我找不到有关如何执行操作的任何内容-但我很狡猾。我想回答我较早发现的一个未解决的问题,但是我一直在努力解释我的解决方案,而无需显示我在工作项目中使用的机密数据。看到您提供的示例电子表格可以帮助我理解并使用解决方案-这是带有“动态数据验证”的电子表格链接:

https://docs.google.com/spreadsheets/d/1TFQm1SObvycIQlzgT7MA-dprmK-g7ps7OZsNQVuhc8E/edit?usp=sharing

问题在于,要使下拉菜单样式的数据验证具有动态性,它需要引用一个范围,但是如果您希望该范围基于从另一个数据验证中选择的另一个值而动态更新,以一种独立的列的方式,使您可以继续处理各行并保持其动态性,您必须想知道将数据验证的第二列所指的范围放在哪里,而又不会妨碍新行或旧行。

要引用我上面链接的电子表格,我通过制作另一个名为“ CALC”的标签来临时存储该计算范围来做到这一点。 (我通常在工作簿中保护并隐藏这些类型的工作表,但在这里看不到它。)在INPUT工作表上,从B列的下拉菜单中选择一个国家后,您需要该下拉菜单C列中的“菜单”可自动填充与所选国家/地区对应的城市。

  

该CALC工作表中的INDEX / MATCH公式可以通过使用INPUT工作表中其列底行中的Country(国家)来完成工作,但是我首先需要弄清楚如何获取一个公式来进行检查。

我最终得出以下公式:如果将其放在INPUT!A2中并向下复制该列的其余单元格,则可以检测到底行:

=(IF((B2 =“”),(“”),(IF((ROW(A2)= 2),(1),(MAX((INDIRECT(“ A2:A”&ROW(A1) ,1)))+ 1)))))

  

如果右边的列中没有选择任何国家,则上面的公式会将单元格留空,但是如果存在,它将为该ID分配一个比先前ID高1的ID号,以确保最近输入的最底部的条目在A列中具有最大ID号。为避免在计算该数字时出现循环逻辑,必须使用INDIRECT公式,如图所示,该公式在其自己的列与第一条非标题行之间找到最大数目-在这种情况下为第2行。鉴于此,IF也用于您在该第一个非标题行中工作的场合。

然后,我在CALC表中准备好“ Docking Bay”,即INPUT表的“动态数据验证”的参考,并在CALC!B2中使用以下INDEX / MATCH公式

=(QUERY({AUX!A:B},“选择Col2,其中Col1 ='”&(INDEX((INPUT!1:501),(MATCH((MAX(INPUT!A:A))),( INPUT!A:A))),(2)))&''按Col2“)的顺序

最后,我将INPUT!C2:C的数据验证设置为引用CALC!B2:B,然后您将动态更新下拉样式数据验证!

  

但是,有关此解决方案的重要说明是,“动态数据验证”仅对于ID列中ID编号最高的行才能正常工作。这意味着您将无法轻松地编辑旧行或填写跳过的行。