网站首页 > 技术文章 正文
需求提出
我在一个小工厂里上班,日常工作是做生产资料的BOM管理,经常遇见BOM按料号去重,再查找父项的问题,今天我们来解决这个,即根据查询的料号的标识,来查询出对应父项描述,父项。
这个数据量有20万行,之前用人工做的时候,函数公式加手工操作,用尽所有力气做一次就要两三天,痛定思痛,努力学了VBA后,使用VBA代码编写完成本任务,每次运行3秒完成,本文案例中我用1万6前行的数据来测试,vba代码写完后每次一秒之内就完成统计,彻底解放了双手,当然有人会说,老板肯定要安排你更多工作,我显然没那么傻啊,我还是3天才交任务,自己省下来的时间去学习充电,努力考证!记住千万不要做的快就马上上交结果!那是傻子 干的事!
由于本文图片尺寸较大, 请大家尽量收藏转发后, 到电脑端大屏查看学习,效果更佳!
解题思路
由于数据比较大, 这次我们使用郑老师教的万能字典行号法,使用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节多列求和通用解法 记录行号二次循环法深入讲解 详细讲解
案例文件下载地址
请私信回复 82334 即可获取
好了,今天有关在Excel中BOM按料号查找的问题便介绍到这,大家赶紧实际操作练习一下吧,有不懂的问题可以留言问小编呦!感谢支持Excel880工作室,还请多多转发,持续关注我们呀!
特别推荐使用VBA代码助手,再也不怕记不住代码
VBA代码助手下载地址
最后,像大家推荐郑老师的VBA代码助手(下载地址VBA永远的神,VBA代码助手,VBAYYDSVBA永远的神,VBA代码助手,郑广学VSTO,郑广学VBA)
只需输入关键字,就能将收藏过的代码整个带出来,太赞了
比如上面代码中的字典 数组输出之类都只需要打几个字就出来
以上案例代码 可以通过代码助手的代码混淆功能, 达到保护代码 依然可以运行哦,赶紧去下载代码助手试试吧!
- 上一篇: C语言二维数组(c语言二维数组排序)
- 下一篇: 22.C# 多维数组(多维数组对象)
猜你喜欢
- 2024-09-15 Scala学习六之数组和元组了解(scala 字符串数组)
- 2024-09-15 数据分析和机器学习框架底层工具NumPy的数组操作-索引和切片
- 2024-09-15 【Python数据分析系列】全面梳理数组维度转化和堆叠操作(案例)
- 2024-09-15 ST 语言数组处理(st语言数组array)
- 2024-09-15 机器学习实战:Numpy多维数组的创建、索引与切片
- 2024-09-15 4小时的工作,1秒完成,中学体育比赛赛道汇总VBA数组字典进阶
- 2024-09-15 22.C# 多维数组(多维数组对象)
- 2024-09-15 C语言二维数组(c语言二维数组排序)
- 2024-09-15 Excel数据透视表、vlookup、数组公式、VBA自定义函数一对多查找
- 2024-09-15 程序大佬的秘密——C语言之数组二三事
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 556℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 504℃MySQL service启动脚本浅析(r12笔记第59天)
- 482℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 480℃启用MySQL查询缓存(mysql8.0查询缓存)
- 460℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 440℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 438℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)