生成过滤的dynamic下拉列表

我需要两个dynamic下拉列表进行数据validation。 一个包含独特的大陆列表供select,然后是第二个列表,这个列表是根据选定的大陆dynamic生成的国家子集。 数据没有任何特定的顺序:

      AB
 --- + --------------------
 1 |  大陆国家
 2 | 非洲阿尔及利亚
 3 | 亚洲中国
 4 | 非洲埃塞俄比亚
 5 | 欧洲法国
 6 | 欧洲德国
 7 | 亚洲印度
 8 | 欧洲意大利
 9 | 亚洲日本
 10 | 欧洲波兰
 11 | 非洲南非
 12 | 欧洲西class牙

我已经成功创build了第一个下拉列表,通过使用隐藏列来生成一个唯一的大陆列表,然后将它们作为命名范围进行关联。 所以那部分完成了,但是

如何基于第一个列表中select的欧洲联盟创build第二个dynamic生成的,过滤的列表(最好没有任何列表中的空白)?

我正在消化的实际数据是数千个数据点,所以性能是一个问题,如果可能,我宁愿不使用VBA。

编辑:多一点search,我发现了一个有用的链接,提供了这个公式:IFERROR(INDEX($ A $ 2:$ A $ 100,小(如果($ B $ 2:$ B $ 100 =“是”), ROW($ A $ 2:$ A $ 100)-ROW($ A $ 2)+1),行($ A $ 2:$ A2))), “”)

这是更接近,但它不会工作,因为我需要把它们放在我的工作表中的每一行,我需要dynamic下拉列表中的单独列,再加上我不确定过滤列表将有多大。

有没有什么办法直接在命名的范围内?

如果您准备应用一系列命名范围(在本例中为B:G的占用部分),那么数据validation与允许:列表和源: =INDIRECT(INDEX($1:$1,MATCH(I2,A$1:A$7,0)))可能适合列J中的条目:

SO20850122的例子

试图澄清:

通常从内向外理解一个公式是比较容易的,所以从=MATCH开始:这看起来是在I2中input的确切(即,0 )值的A1:A7列表中的位置。 对于S.AMERICA – 不错的select! 🙂 – 这恰好是最后的(第七)。 然后这个结果被送到=INDEX部分作为参数,以确定哪个列号是相关的(对于按国家进行validation)。 对于Excel ColumnG是第七个。

我没有完全习惯于使用这个公式,因为没有一个数组有多于一个行/列的问题,部分是为了约定,validation和查找列表通常是垂直排列而不是水平排列的(例如VLOOKUP更经常应用而不是HLOOKUP),部分原因是我们更习惯于查看列标签,而不是行列标签等。实际上,出于同样的原因,电子表格一般允许比宽度更长(例如,16,384列,但1,048,576行),部分原因是为了我答案中的图像宽高比。

可供select的布局虽然在实践中可能稍微不方便(例如设置指定范围),但可能有助于我的解释:

左图:将国家数据转换为更常规的vlookup布局(也许可以用Continents删除行),validation公式为:

 =INDIRECT(INDEX(A$1:A$6,MATCH(A8,A$1:A$6,0))) 

(为此我必须移动“触发单元”I2等,因为这个单元现在需要用于其他数据 – 我select了A8等)。

正确的图像如下:离开“触发单元”为左图像,也取消Continents ,validation公式将是:

 =INDIRECT(INDEX(C$1:H$1,MATCH(A8,C$1:H$1,0))) 

SO20850122第二个例子

如果按大陆排列列表,则可以使用公式构build不带任何辅助单元的dynamic范围名称

 =INDEX(Sheet1!$B:$B,MATCH(Sheet1!$E$2,Sheet1!$A:$A,0)):INDEX(Sheet1!$B:$B,MATCH(Sheet1!$E$2,Sheet1!$A:$A,1)) 

细胞E2有选定的大陆。 这是一个截图,具有相同的情况。 用Continentreplace类别,并用CountryreplaceSubCategory。

在这里输入图像描述

好。 然后从创build一个dynamic的第二个列表开始,您可以通过一些附加的字段和列来实现这个简单的方法:

E1我从选定的大陆开始。 这必须参考第一个下拉列表或者E1可以用下面的公式代替。

C2中 ,用公式=IF(A2=$E$1;MAX($C$1:C1)+1;"")开始一个帮助列,并将其拖到您的国家/地区列表的末尾。

如果你在E2中join=MAX(C:C)来保持这个大陆的国家数量,那么不需要但是更容易理解。

D8开始写下一些数字(1,2,…),直到D50,然后我写=IF(D6<=$E$2;INDEX(B:B;MATCH(D6;C:C;0));"")E8中 ,并将其拖到E50。

最后看起来对我来说是这样的,其中范围F8可能到F50被命名为“countryDropdown”,在数据validation中可以与=INDIRECT("countryDropdown")一起使用。

  ABCDE ---+------------------------------------------------------------ 1 | Continent Country Selected Africa 2 | Africa Algeria 1 Max Number 3 3 | Asia China 4 | Africa Ethiopia 2 5 | Europe France 6 | Europe Germany 7 | Asia India 8 | Europe Italy 1 Algeria 9 | Asia Japan 2 Ethiopia 10 | Europe Poland 3 South Africa 11 | Africa South Africa 3 4 12 | Europe Spain 5 

请检查我的方法:

  1. 数据不需要sorting
  2. 支持多对多的关系
  3. 没有VBA
  4. 没有命名的范围
  5. 事先不需要知道独特的项目名称或数量

在新标签中打开图片看到更好:

在Sheet1(数据表)中: 在这里输入图像描述
按照公式: 在这里输入图像说明

在Sheet2(帮手表)中: 在这里输入图像说明
按照公式:
在这里输入图像描述

在Sheet3(结果表)中: 在这里输入图像说明