ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 70207|回复: 141

[原创]试定义多层次可模糊查找的下拉列表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2004-11-8 17:35 | 显示全部楼层 |阅读模式
2004-11-11可根据数据源中的任意字符模糊查找生成有效性序列(有易失性函数、并且实现资料表可以任意删除、修改和插入空行空列且不需要同时修改辅助列公式,使得辅助列不再是个累赘。)

[ 本帖最后由 apolloh 于 2008-11-8 21:27 编辑 ]

试定义多层次可模糊查找的下拉列表(论坛改版重新上传).rar

9.59 KB, 下载次数: 4931

TA的精华主题

TA的得分主题

发表于 2004-11-8 19:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

今天偶然又来看了一下,新增了不少东西,又学到不少,好!

[此贴子已经被作者于2004-11-17 21:06:36编辑过]

TA的精华主题

TA的得分主题

发表于 2004-11-8 20:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2004-11-8 20:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2004-11-8 20:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

我来看看:)

首先,数组公式的思路是正确的,做得不错!你的明细数据这么规整(已经按业务员排序),有几个建议给你(可能有点就事论事儿):

1、对于此类明细数据一般可能数据量会很大,使用辅助列是一个好方法,但是既然使用了辅助列,那么就应该好好利用其辅助性,将一个数组公式可以完成的工作让其他辅助来分担,因此,建议用一个简单公式来代替辅助列公式,如: C2=(B2<>B1)+N(C1), 那么辅助表中业务员的公式就简单了,如: =IF(ROW(A1)<=MAX(资料表!C:C),INDEX(资料表!B:B,MATCH(ROW(A1),资料表!C:C,0)),"") 如果即使用了辅助列,最终还是要用数组公式来处理,那么辅助列是否有点得不偿失?:)

2、由于你的明细表已经排序,那么对于取客户的辅助公式就有些多余了,为什么呢?因为我们可以用公式直接在明细表中取得相应的客户,如客户公式为: 客户名称=OFFSET(资料表!$A$1,MATCH(业务员,资料表!$B:$B,0)-1,0,COUNTIF(资料表!$B:$B,业务员))

3、以上想法是在你的明细数据在排序情况下的普通公式的用法,但如果真正工作中的明细表可能就并非如此(可能是无序的),那么“明细表”辅助列的公式可以为:=(MATCH($B2,B:B,0)=ROW())+N(C1),业务员辅助公式不变;在这种情况,你的客户公式就起作用了。

4、最后我们再看看“客户名称”的定义,介绍一个Fieldsun版主的公式(对字符型数据有效),挺有意思的:) =OFFSET(辅助表!$B$2,0,0,COUNTIF(辅助表!$B:$B,"?*")-1,)

另外:对于数据量大的工作表中,我们最好少用Countif()函数,因为Countif()是个易失函数,每次操作工作表后都会自动运算一次,在数据海量的情况下我们最好少用(如果确实需要,建议最好指定范围),有兴趣的话你可以将数据增加到上千行试试。

如果我们是练习数组公式,没有问题,如果是在工作中,那么运算速度问题就必须考虑,没有任何一个老板会花时间来等待公式的运算的,他希望是越快越好!呵呵~~~就写这么多了,有问题可以共同探讨:)

[此贴子已经被作者于2004-11-8 20:22:33编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-11-8 20:52 | 显示全部楼层

谢谢版主能认真地看,而且详尽地列举了不足之处(当然不只这么多)。这在我辈看来,真的是容易忽略的问题。

1、2、明细资料排序是特例,实际已应用中可能不是这样的,会有删除或插入的情况出现,不同业务员的客户资料可能被打乱。

3、:=(MATCH($B2,B:B,0)=ROW())+N(C1)这个公式非常棒,我决定用它了!

4、刚学过Chenjun版主的Counif中关于空字符的解法,没想到Fieldsun版主这个COUNTIF(辅助表!$B:$B,"?*")更妙,这让我感到学EXCEL真是有无穷的快乐!

5、我决定在辅助列中舍弃Countif了,原来她没我想象的那样贤惠(不浪费我的米,又能当好家)。但经版主点拨,我决定和她分居了。没办法,我不舍它,饭碗舍我,非负心郎也。

6、这个应用是我们公司用来套打邮政快递的,实际的应用要复杂些,我只是简单的抽取了一部份。不过速度还行,对于这个特例来说。

对于Excel,我想自己由零开始,认真地学!

望版主今后能对我更是关爱有加,让我能够快快成长起来。

最后在此,再次感谢!希望路过走过,一定要认真看过,并批评过才是。

[em10][em10][em10][em10][em23][em24]
[此贴子已经被作者于2004-11-8 20:55:57编辑过]

TA的精华主题

TA的得分主题

发表于 2004-11-8 21:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

不知你们实际工作中数据量到底有多大?几百上千行?甚至更多?如果真是这样,建议你连“客户名称”也不要使用数组公式,因为它在海量数据的工作表中确实运算得太慢了!还是用辅助列来做吧!

对了,你的每个客户还有可能有重复吧?那么最后的查询公式可能也需要修改的,否则查找结果就不对了,自己多考虑,千万不要因小失大就麻烦了:)

另外,大家都是从这个家里长大的,也感谢这里给我们这个交流的机会,共同成长、共同学习、共同进步!

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-11-8 21:28 | 显示全部楼层

呵呵,才几百个客户,客户没有重复的。但应该也会有海量数据的需求。

很高兴版主以诚相待。

不过版主刚才说的,我不是很理解,能在我的例子上修改一下吗?

谢谢你!

[em10]

TA的精华主题

TA的得分主题

发表于 2004-11-8 21:55 | 显示全部楼层
不知我哪里说的不明白?是我不明白?还是你不明白?呵呵~~~

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-11-8 22:00 | 显示全部楼层
以下是引用gdliyy在2004-11-8 21:22:00的发言:

不知你们实际工作中数据量到底有多大?几百上千行?甚至更多?如果真是这样,建议你连“客户名称”也不要使用数组公式,因为它在海量数据的工作表中确实运算得太慢了!还是用辅助列来做吧!

......

这个怎么做,如果能不用数组当然最好拉,今天下午,我也是告诉同事我有这个担心的。

还请版主再次指教!

[em24]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-25 08:59 , Processed in 0.051051 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表