需求提出
我在一个小工厂里上班,日常工作是做生产资料的BOM管理,经常遇见BOM按料号去重,再查找父项的问题,今天我们来解决这个,即根据查询的料号的标识,来查询出对应父项描述,父项。
这个数据量有20万行,之前用人工做的时候,函数公式加手工操作,用尽所有力气做一次就要两三天,痛定思痛,努力学了VBA后,使用VBA代码编写完成本任务,每次运行3秒完成,本文案例中我用1万6前行的数据来测试,vba代码写完后每次一秒之内就完成统计,彻底解放了双手,当然有人会说,老板肯定要安排你更多工作,我显然没那么傻啊,我还是3天才交任务,自己省下来的时间去学习充电,努力考证!记住千万不要做的快就马上上交结果!那是傻子 干的事!
当然大家如果需要定制VBA表格,可以联系我加QQ 3389320399 或微信 fxYYDS3389320399
由于本文图片尺寸较大, 请大家尽量收藏转发后, 到电脑端大屏查看学习,效果更佳!
解题思路
由于数据比较大, 这次我们使用郑老师教的万能字典行号法,使用VBA的行号定位+数组循环来完成,下面就开始我们愉快的学习旅程!
- 对源数据循环,VBA将相同料号的行号装入字典,行号用逗号分隔记录
- 循环字典中的料号关键字 取出对应的行号
- 按逗号拆分行号得到行号数组
- 循环行号数组,从源数据依次取出右侧多列父项
- 结果放入结果数组,写入结果区
前置知识
本案例属于实战案例,零基础有点难,学习本案例需要至少有以下VBA基础
-
VBA数组基础
-
根据表格有效区域获取数组
-
VBA字典基本知识
-
VBA字典行号法基础
以上知识点,本人均在郑广学VBA175例教程中学习
郑广学VBA175例教程链接
解题详细步骤
1 、定义变量, 初始化VBA字典
首先需要定义一些变量和字典对象,和大家一样,最开始这个字典对象很长,总是记不住,不过还好有工具可以帮助我们快速输入,安装VBA代码助手插件后,在第25行, 只需要输入 dicd四个字母,然后按下空格,就会得到输入提示, 按下Tab键即直接输入字典的定义, 即使是第一天学vba的同学,也不怕记不住代码了!
2、循环遍历源数据数组,使用VBA字典按关键字记录行号
第29行到36行,将arr数组中的第13的料号作为字典的关键字key,
并在循环中将料号对应的行号连接并用分隔符隔开,存入字典。
循环完毕我们就将料号和他对应的行号存入字典dic中,为了方便下面取出结果,
在第37-38行取出字典的keys,items数组
3 、写入结果数组 ,输出数组到结果表
定义一个结果数组brr ,循环对应的料号数组keys,
分割取出对应料号的原数据所在的行号,再从原数据数组arr 中
结果数组brr的第一列 放料号
结果数组brr的第二列 父项描述
结果数组brr的第三列 父项
注意 在放结果数组的时候,列数根据父项个数 动态重新定义结果数组brr的第二维数
最后 输出结果数组brr到sheet2中
以上知识点在 VBA175例 第194节多列求和通用解法 记录行号二次循环法深入讲解 详细讲解
郑广学VBA175例教程链接
案例文件下载地址
请关注微信公众号EXCEL880 公众号主页回复 82334 即可获取
好了,今天有关在Excel中BOM按料号查找的问题便介绍到这,大家赶紧实际操作练习一下吧,有不懂的问题可以留言问小编呦!感谢支持Excel880工作室,还请多多转发,持续关注我们呀!
特别推荐使用VBA代码助手,再也不怕记不住代码
最后,像大家推荐郑老师的VBA代码助手(下载地址vbayyds.com)
只需输入关键字,就能将收藏过的代码整个带出来,太赞了
比如上面代码中的字典 数组输出之类都只需要打几个字就出来
以上案例代码 可以通过代码助手的代码混淆功能, 达到保护代码 依然可以运行哦,赶紧去下载代码助手试试吧!