网站首页 > 技术文章 正文
利用Excel的【数据有效性】功能制作下拉菜单,应是表哥表姐耳熟能详的一个技能了。
当然,有些小伙伴可能还不会,不会的小伙伴估计是E界新人,是轻稚可爱的表弟表妹,是早晨八九点钟的太阳,是祖国——咳咳,作为过来人,星光还是诚挚建议您翻阅下EH公众号的往期文章,认真学习下【数据有效性】的相关知识——毕竟这部分知识是非常炫酷实用的。
咱们这期讲的内容是也和数据有效性有关,是利用CELL函数,制作具有模糊查询效果的动态下拉菜单。
这话到底啥意思呢,还是用动态图说话吧。
目标
在A列某区域输入某个关键词,在数据有效性的下拉列表里,显示出包含该关键词的数据。
材料
一份名单表:
制作过程
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函数套路的文章,理解起来就简单多了。
- CELL("contents")
CELL函数省略了第二参数,获得最后更改单元格的值。
- FIND(CELL("contents"),D$2:D$10)
FIND函数查询CELL函数的结果,是否在D2:D10单元格区域存在,如存在则返回一个位置数值,相反则返回错误值,生成一个内存数组,比如:
{#VALUE!;4;4;2;#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单元格后结果如下:
选取设置下拉菜单的单元格区域A2:A9,点击【数据】选项卡中的【数据验证】(13版本之前名为【数据有效性】)。
在弹出的数据验证对话框中,单击【设计】选项卡【允许】输入框右侧的按钮,在下拉列表中选择【序列】。
单击【来源】右侧的选取按钮选择工作表的数据区:$E$2:$E$10
单击【出错警告】选项卡,去掉【输入无效数据时显示出错警告(S)】的勾选。
最后【确定】之,大功告成了。
结束语
挠头……那个……对于大部分表弟表妹来说,今天分享的内容难度系数确实有些偏高,想必有不少人云里雾里的,难点之处在于那条长长的裹脚布函数。
关于INDEX+SMALL+IF的函数套路,坊间里戏称万金油套路,由此可见它作用之强大——作为早晨八九点钟的太阳,E界未来的希望,怎能不掌握它呢?
——新的一天,兄弟姐妹们努力学习吧!
图文作者:看见星光
猜你喜欢
- 2024-12-06 高等数学(1)——函数的定义,有界性和单调性
- 2024-12-06 没想到吧,Excel模糊查找还可以用这5个方法
- 2024-12-06 算季度的八种方法,你会哪个?
- 2024-12-06 VLOOKUP模糊查询?看完这篇文章那都不是事
- 2024-12-06 《模糊多目标决策理论、方法及其应用研究》 模糊数综述
- 2024-12-06 这7个常见的Excel小问题,你知道如何解决吗?
- 2024-12-06 大众情人VLOOKUP函数详解
- 2024-12-06 vlookup配合通配符,模糊查询也能很精确,再也不用筛选了
- 2024-12-06 如果你连这些“通配符”都不会,就不要抱怨工资低了
- 2024-12-06 LOOKUP公式中1和0的含义,我用1500字给大家讲明白了
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)