6

我需要两个用于数据验证的动态下拉列表。一个包含可供选择的唯一大陆列表,第二个列表是根据所选大陆动态生成的国家子集。数据没有任何特定的顺序:

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

我已经成功创建了第一个下拉列表,方法是使用隐藏列生成唯一的大陆列表,然后将它们关联为命名范围。但是,这部分已经完成

如何根据第一个列表中选择的 Continent 关联创建第二个动态生成的过滤列表(最好在列表中没有任何间隙)?

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

编辑:通过更多搜索,我发现了一个有用的链接,它为我提供了这个公式: IFERROR(INDEX($A$2:$A$100,SMALL(IF($B$2:$B$100="Yes", ROW($A$2:$A$100)-ROW($A$2)+1),ROWS($A$2:$A2))),"")

它更接近了,但是它不起作用,因为我需要将它们放在我的工作表中的单独列中,用于我需要动态下拉列表的每一行,而且我不确定过滤后的列表会有多大。

有没有办法直接在命名范围内执行此操作?

4

5 回答 5

3

如果您按大陆升序对列表进行排序,那么您可以使用公式构建一个没有任何辅助单元格的动态范围名称

=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 具有选定的大陆。这是具有相同场景的屏幕截图。将 Category 替换为 Continent,将 SubCategory 替换为 Country。

在此处输入图像描述

于 2014-01-01T02:01:48.893 回答
2

如果您准备应用一系列命名范围(在示例中为 B:G 的占用部分),则使用 Allow: List 和 Source: 进行数据验证=INDIRECT(INDEX($1:$1,MATCH(I2,A$1:A$7,0)))可能适合 J 列中的条目:

SO20850122 示例

尝试澄清:

从内向外理解公式通常更容易,所以从 开始:这看起来在 A1:A7 列表中找到在 I2 中输入=MATCH的确切(即 )值的位置。,0S.AMERICA——不错的选择!:-) - 恰好是最后一个(第 7 个)。然后将该结果作为参数馈送到=INDEX部件,以确定哪个列号是相关的(对于按国家/地区进行的验证)。对于 Excel ColumnG 是第七个。

我对公式并不完全习惯,因为我不关心具有多个单行/列的数组 - 部分是为了约定验证和查找列表更经常垂直排列而不是水平排列(例如 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)))

SO20850122 第二个例子

于 2013-12-31T22:45:22.653 回答
0

好的。然后从创建一个动态的第二个列表开始,您可以使用一些额外的字段和列以这种简单的方式进行:

E1中,我从选定的大陆开始。这必须参考第一个下拉列表,否则可以在以下公式中替换 E1。

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

没有必要,但更容易理解,如果你=MAX(C:C)输入E2来保持这个大陆的国家数量在某个地方。

D8开始,我开始向下写一些数字(1、2、...),直到 D50,然后我=IF(D6<=$E$2;INDEX(B:B;MATCH(D6;C:C;0));"")E8中写入并将其拖到 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
于 2013-12-31T04:58:17.650 回答
0

请检查我的方法:

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

在新标签中打开图像以更好地查看:

在 Sheet1(数据表)中: 在此处输入图像描述
作为公式: 在此处输入图像描述

在 Sheet2(辅助表)中: 在此处输入图像描述
作为公式:
在此处输入图像描述

在 Sheet3(结果表)中: 在此处输入图像描述

于 2015-05-16T15:26:24.007 回答
0

我想我现在是个掘墓人,但我一直在寻找同样的东西并找到了这个帖子。所有不同的选项都很难做到和理解,但我开发了自己的解决方案。

所需要的只是: 总共6个公式。一根支撑柱和一张支撑板。

这里是:

我根据原始帖子中的大洲和国家/地区设置的表格进行了分析。它在列中有大洲和国家,并被命名为“国家”。这张桌子容纳了所有大陆及其各自的国家。它在 Sheet1 中。

然后我制作了一张新表(Sheet2),其中包含一个新表(“Test”),其中包含以下列:Continent(保存独特大陆的下拉列表),Country(保存属于的国家/地区的下拉列表)大陆选择)和一个​​支持列(顺序),在唯一的大陆列表中添加大陆的顺序。支撑柱的公式为:

=MATCH([@Continent],UNIQUE(Countries[Continent]),0)

“测试”表现在的样子。它有 3 列:大陆、国家和秩序

然后我创建一个新工作表(Sheet3)。在 A1 中,我添加了这个公式,以获取列中的所有唯一大陆: =UNIQUE(Countries[Continent])

在 B1 中,我添加以下公式: =IFERROR(TRANSPOSE(SORT(INDEX(Countries[Country],SMALL(IF(Countries[Continent]=$A1,ROW(Countries[Continent])-1),ROW(INDIRECT("1:"&COUNT(IF(Countries[Continent]=$A1,ROW(Countries[Continent])-1)))))))),"")

它在“Countries”表中查找所有国家,这些国家的大陆显示在 Sheet2 的 A 列中,并按字母顺序将它们填充到列中。我将此公式扩展到 B 列的所有行(或者与您需要的选择数量一样多,对于大陆,9 就足够了)。

设置 sheet3 后的外观。

完成后,我为所有大陆创建了一个命名范围。我把它命名为“UniqueContinents” =INDIRECT("Sheet3!$A$1:$A$"&COUNTIF(Sheet3!$A:$A,"*"))

现在剩下的就是添加数据验证。

在“大陆”列的“测试”表中,我添加了数据验证: =UniqueContinents

在“国家”列的“测试”表中,我添加了数据验证: =INDIRECT("Sheet3!"&ADDRESS($C2,2)&":"&ADDRESS($C2,COUNTIF(INDIRECT("Sheet3!"&$C2&":"&$C2),"*"))) 它从与所选大陆匹配的行的 Sheet3 中获取列。

我已经完成了。如果我将更多大陆或国家添加到“国家”表中,所有其他下拉列表都会动态增长。如果我删除某些东西,它会到处被删除。

这是从瑞典公式翻译过来的,所以如果某些东西不能正常工作,请检查我是否错过了转换。我们用 ; 而不是 ,例如,作为公式中的分隔符。

带有工作下拉列表的表格。

于 2022-02-03T10:38:49.097 回答