Excel中预先选定的可靠列表

lymnna71  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(107)

Excel编码大师,我想有人给我一个手在下面的问题:

我拥有的

我有一个Excel 2019。不是365版。我有一个2列的Excel表。列I包含人员列表。I列中的每个人都有他/她的原籍国,在H列的相应单元格中表示。
为了看得更清楚,请看这张照片。

我有两个 * 下拉启用 * 单元格(K4L4)。

K4包含所有国家的列表,见H栏。
L4应该有一个人员列表,列中有I
现在的问题是

我如何对K4L4单元格进行编码,以便在K4单元格中选择国家时,在L4单元格的下拉列表中,我将仅获得I列中原籍国与K4中的原籍国相同的人员的列表?
我觉得用那些返回数组的函数是可以做到的,但我就是不能把我的头都包起来。

vhmi4jdf

vhmi4jdf1#

到目前为止我都是这样工作的。

执行此操作所需的函数为INDEXMATCHIFIFERRORCOUNTIF,这些函数在Excel 2019中都可用。
唯一的事情,我挣扎(没有365)是,我不知道如何消除白色的动态范围。
“E”列中的公式是制作“国家”列的唯一列表:

=IFERROR(INDEX($H$2:$H$20,MATCH(0,COUNTIF($E$1:$E1,$H$2:$H$20),0)),"")

此公式必须至少从第2行开始,因为它需要在第2行上方保留一个空格。
列F是列I的类似唯一列表,但是基于K4中的值是动态的:*现已更新,请参阅下面的编辑内容

=IFERROR(INDEX($I$2:$I$20,MATCH(0,IF($K$4=$H$2:$H$20,COUNTIF($F$1:$F1,$I$2:$I$20),""),0)),"")

K4中的验证基于E列,L4中的验证基于F列。
正如我所说的,没有O365,我不知道如何删除白色,但这至少应该为您工作。
编辑:我又看了一遍,弄清楚了空格的问题:
L4的数据确认:

=INDIRECT("F2:"&"F"&(COUNTA(F:F)-COUNTIF(F:F," ")+1))

另外,K4的数据验证可以类似,如果您想扩展列H以包含更多条目:

=INDIRECT("E2:"&"E"&(COUNTA(E:E)-COUNTIF(E:E," ")+1))

这将从F2(始终是我们的第一个值)创建一个列表,并将动态扩展到F列有数据,假设我们将F2中的公式更改为:

=IFERROR(INDEX($I$2:$I$20,MATCH(0,IF($K$4=$H$2:$H$20,COUNTIF($F$1:$F1,$I$2:$I$20),""),0))," ")

注意,这个公式的IFERROR和上一个公式的COUNTIF中的字符不是空格,而是Alt+255中的字符。
最后一个细节是,在单元格L4中添加一些条件格式,以便在L4中选择数据,然后更改K4的值(使L4不再有效),将返回空白-这实际上是白色背景上的白色文本。
L4的条件格式公式:

=NOT(IFERROR(ISNUMBER(SEARCH($L$4,TEXTJOIN(" ",1,F:F))),FALSE))
1mrurvl1

1mrurvl12#

以下是我对@RGilchrist上面回答的详细阐述。他的观点是主要的,因此所有的功劳也都归于他。
执行此操作所需的函数为INDEXMATCHIFIFERRORCOUNTIF,这些函数在Excel 2019中都可用。

"E"列中的公式是制作"国家"列的唯一列表:=IFERROR(INDEX($H$2:$H$17;MATCH(0;COUNTIF($E$1:$E1;$H$2:$H$17);0));"")
例如,在图片上,您可以看到单元格E2的公式。
对这一公式的一些评论:

  • 因为是一个数组公式,所以应该用Ctrl+Shift+Enter输入到单元格中,你可以看到它是用花括号{}括起来的。
  • 公式上方至少需要有一个单元格。在本例中,它是E1
  • 如图所示,我特意将数据集设置为sparce,而不是dence(它有空行),要解决结果集中的零值问题,必须将0放置到E1单元格中。
  • 在图片上,我的数据集是彩色的。这暗示了我已经将数据集声明为表的事实。这将允许一些简洁的功能,比如如果我向表中添加更多行,则会自动扩展表。这也为数据集中的列提供了一些功能上简洁的寻址。在我的区域设置中,表寻址的公式如下所示:=IFERROR(INDEX(Tab_1[Стовпець1];MATCH(0;COUNTIF($E$1:$E2;Tab_1[Стовпець1]);0));""),其中Tab_1是我声明的表的名称,[Стовпець1]是表中列的名称。

列F是列I的类似唯一列表,但是基于K4中的值是动态的:=IFERROR(INDEX($I$2:$I$20,MATCH(0,IF($K$4=$H$2:$H$20,COUNTIF($F$1:$F1,$I$2:$I$20),""),0)),"")
对先前公式的所有评论也适用于本公式。
K4中的数据验证基于E列,L4中的验证基于F列。但为了克服生成的下拉列表中的空白问题,数据验证应基于使用OFFSET函数的公式。因此K4的数据验证源应为=OFFSET($E$2;;;COUNTIF($E$2:$E$10;"?*"))

相关的屏幕截图是在我的区域设置,但一般的界面应该是熟悉的。

相关问题