生成过滤的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中的条目:
试图澄清:
通常从内向外理解一个公式是比较容易的,所以从=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)))
如果按大陆排列列表,则可以使用公式构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
请检查我的方法:
- 数据不需要sorting
- 支持多对多的关系
- 没有VBA
- 没有命名的范围
- 事先不需要知道独特的项目名称或数量
在新标签中打开图片看到更好:
在Sheet1(数据表)中:
按照公式:
在Sheet2(帮手表)中:
按照公式:
在Sheet3(结果表)中: