http://blog.sina.com.cn/s/blog_138899a8e0102wmwu.html
[Excel函数]有趣的CELL(二):制作模糊查询效果的数据有效性下拉菜
(2016-07-10 22:15:53)
标签: 杂谈
作者:Excelers(网名看见星光)
利用Excel的【数据有效性】功能制作下拉菜单应是表哥表姐耳熟能详的一个技能了。
咱们这期讲的内容是也和数据有效性有关,就是利用上期讲过的CELL函数(上期链接),制作具有模糊查询效果的动态下拉菜单。
这话到底啥意思呢,还是用动态图说话吧(点击下方GIF图)
**1
** **目标
**
在A列某区域输入某个关键词,在数据有效性的下拉菜单里,显示出包含该关键词的数据。
**2
** 材料
一份名单表。如下图D2:D10单元格区域,是六个男人三个女人的人名儿。
**2
** 制作过程
(
一
)
使用组合键<Ctrl Shift Enter>,在E2单元格输入数组公式,并向下填充到E10区域:
=INDEX(D:D,SMALL(IF(ISNUMBER(FIND(CELL("contents"),D$2:D$10)),ROW($2:$10),4^8),ROW(A1)))&""
这公式看起来很复杂的模样,长长的像老太太的裹脚布,但倘若您学习并掌握了我们之前推送的INDEX SMALL IF函数套路的文章(INDEX SMALL链接),理解起来就简单多了。
●
CELL("contents")
CELL函数省略了第二参数,获得最后更改单元格的值。
●
FIND(CELL("contents"),D$2:D$10)
FIND函数查询CELL函数的结果,是否在D2:D10单元格区域存在,如存在则返回一个位置数值,相反则返回错误值,生成一个内存数组,比如:{#VALUE!;4;4;2;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
●
IF(ISNUMBER(FIND(CELL("contents"),D$2:D$10)),ROW($2:$10),4^8)
ISNUMBER函数判断FIND函数的结果是否为数值,如为数值,则IF函数判断为真,返回相关值所对应的行号,如否,则返回值4^8,即65536。
●
=INDEX(D:D,SMALL(IF(ISNUMBER(FIND(CELL("contents"),D$2:D$10)),ROW($2:$10),4^8),ROW(A1)))&""
SMALL函数对IF函数的结果进行从小到大取数,随着公式的向下填充,依次提取第1、2、3、4……N个最小值,由此依次得到符合条件——包含最后更改单元格值的单元格的行号。
INDEX函数根据SMALL函数返回的索引值,得出结果。
当SMALL函数所得到的结果为4^8,即65536时,意味着符合条件的行号已经被取之殆尽了。此时INDEX函数将返回D65536单元格的值,通常来说,这么大行号的单元格是空白单元格,使用&“”的方式,规避空白单元格返回零值的问题,使之返回假空:””。
●
**由于CELL("contents"),得到的是最后更改单元格的值,而编辑上述公式时的单元格即为最后更改内容的单元格,此时会造成循环引用,但不必理会
**。公式填充至E10单元格后结果如下:
**3
** 制作过程(二)
选取设置下拉菜单的单元格区域A2:A9,点击【数据】选项卡中的【数据验证】(10版本之前名为【数据有效性】),在弹出的数据验证对话框中,单击【设计】选项卡【允许】输入框右侧的按钮,在下拉列表中选择【序列】;单击【来源】右侧的选取按钮选择工作表的数据区域:$E$2:$E$10。
单击【出错警告】选项卡,去掉【输入无效数据时显示出错警告(S)】的对勾。
最后【确定】之,便大功告成了。
3 结束语
挠头……那个……对于大部分表弟表妹来说,今天分享的内容难度系数确实有些偏高,想必有不少人云里雾里的,难点之处在于那条长长的裹脚布函数。关于INDEX SMALL IF的函数套路,坊间里戏称万金油套路,是熟通Excel函数必会的套路之一,由此可见它的强大,建议尽量掌握这个套路INDEX SMALL——
明天我们分享利用Excel函数快速将总表信息拆分到各个分表中,效果请看动画(点击下图动起来):
转载请注明出处,谢谢。@EXCELERS
分享: