我需要两个动态下拉列表来进行数据验证。一个包含可供选择的唯一大陆列表,然后是第二个列表,它是基于所选大陆的动态生成的国家子集。数据没有任何特定顺序:
A B ---+-------------------- 1 | Continent Country 2 | Africa Algeria 3 | Asia China 4 | Africa Ethiopia 5 | Europe France 6 | Europe Germany 7 | Asia India 8 | Europe Italy 9 | Asia Japan 10 | Europe Poland 11 | Africa South Africa 12 | Europe Spain
我已成功创建了第一个下拉列表,方法是使用隐藏列生成唯一的大陆列表,然后将它们关联为命名范围。然而,那部分已经完成了
如何根据第一个列表中选择的Continent关联创建第二个动态生成的过滤列表(最好在列表中没有任何空白)?
我正在消化的实际数据是数千个数据点,所以性能是一个问题,如果可能的话我宁愿不使用VBA。
修改:通过更多搜索,我找到了helpful的链接,它为我提供了以下公式: IFERROR(INDEX($ A $ 2:$ A $ 100中,SMALL(IF($ B $ 2:$ B $ 100 = “是”,ROW($ A $ 2:$ A $ 100)-ROW($ A $ 2)+1),ROWS ($ A $ 2:$ A2))), “”)
它更接近,但它不起作用,因为我需要将这些放在我的工作表中的单独列中,我需要动态下拉列表的每一行,而且我不确定过滤列表的大小是。
有没有办法直接在命名范围内执行此操作?
答案 0 :(得分:2)
如果您准备应用一系列命名范围(在示例中,B:G的占用部分),则允许:列表和来源:=INDIRECT(INDEX($1:$1,MATCH(I2,A$1:A$7,0)))
的数据验证可能适合J列中的条目:
尝试澄清:
通常从内向外更容易理解公式,所以从=MATCH
开始:这看起来在A1:A7列表中找到确切(即,0
)值的位置进入I2。对于S.AMERICA
- 不错的选择! :-) - 碰巧是最后一次(第7次)。然后将此结果作为参数提供给=INDEX
部分,以确定哪个列号是相关的(对于按国家/地区的验证)。对于Excel ColumnG是第七个。
由于没有使用具有多个行/列的数组,我对公式并不完全是传统的 - 部分为了约定,Validation和Lookup列表通常垂直排列而不是水平排列(例如VLOOKUP)应用程序比HLOOKUP更频繁,部分原因是因为我们更习惯于查看列的标签而不是行的标签等。 - 实际上是因为电子表格通常允许比它们更宽(例如16,384列)但是1,048,576行),部分是为了我答案中的图像宽高比。
替代布局虽然在实践中可能稍微不方便(例如,用于设置命名范围)但可能有助于我尝试解释:
左下图:将国家/地区数据转换为vlookup的更常规布局(也可以删除Continents
行),验证公式为:
=INDIRECT(INDEX(A$1:A$6,MATCH(A8,A$1:A$6,0)))
(我必须移动'触发单元'I2等,因为其他数据现在需要该单元格 - 我选择了A8等。)
右下图:离开左侧图像的“触发单元格”并取消Continents
,验证公式为:
=INDIRECT(INDEX(C$1:H$1,MATCH(A8,C$1:H$1,0)))
答案 1 :(得分:2)
如果按大陆升序排序列表,那么您可以构建一个没有任何辅助单元格的动态范围名称,其公式为
=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具有所选的大陆。这是一个相同场景的屏幕截图。将类别替换为Continent并将SubCategory替换为Country。
答案 2 :(得分:0)
确定。然后从创建动态第二个列表开始,您可以通过一些额外的字段和列轻松实现:
在 E1 中,我从选定的大陆开始。这必须参考第一个下拉列表或E1可以在以下公式中替换。
在 C2 中,您可以使用公式=IF(A2=$E$1;MAX($C$1:C1)+1;"")
启动帮助列,然后将其拖到国家/地区列表的末尾。
如果您将=MAX(C:C)
放在 E2 中以保留此大陆的国家/地区数量,则不是必须但更容易理解。
从 D8 开始写下一些数字(1,2,...),直到D50,然后我在 E8 中写=IF(D6<=$E$2;INDEX(B:B;MATCH(D6;C:C;0));"")
并拖动它降至E50。
最后看起来对我来说是这样的,其中F8到F50的范围被命名为“countryDropdown”,它可以在数据验证中与=INDIRECT("countryDropdown")
一起使用。
A B C D E
---+------------------------------------------------------------
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
答案 3 :(得分:0)
请检查我的方法:
在新标签中打开图像以便更好地看待:
在Sheet1(数据表)中:
作为公式:
在Sheet2(帮助表)中:
作为公式:
在Sheet3(结果表)中: