脐橙园基地
采摘忙
硕果累累
每到这个季节,都是赣南脐橙大量上市的时间。赣南脐橙不仅带富了大量的农民,也带动了诸如包装、加工、物流、电商等一大批行业繁荣发展,是赣南老区当之无愧的摇钱树,致富树。
本次的实例就是因此而起,举例如下图:
朋友电商的客户下单购买脐橙,有的客户同一个地址下单的数量会有2箱、3箱甚至更多箱。但是因为一箱脐橙20斤比较重,快递公司为了减轻压力,要求一个单号只能寄一箱。自然的,需要把每一行箱数大于2的都分拆为每行一箱,这样才能顺利给快递打单发货(你要是问我为啥不丢给快递让他们去弄?这个时候快递都是大爷,都要求他们的,拽的很,你想早点发货就要按他们说的做)。
例如:张三1订购2箱,需要向下复制一行,每行的订购箱数改为1,如下图
手工操作修改过程
这么一来,繁琐的操作就来了,插入多个空行 - 复制首行信息 - 把箱数都改为1。一天少也有几十箱,多的时候几百箱,手工一个一个改的话实在不行,效率太低。
繁琐重复的操作,又是在excel里面的数据,自然会想到VBA。永恒君花了几分钟帮朋友整理修改了一份VBA代码,效率立马就提上来了,效果如下:
点击按钮,选择脐橙箱数所在的单元格序列,确定即可。
修改一个单快的话也要5s左右,有的甚至更多。而有5s的时间,程序都可以运行n次了,朋友说,终于可以不用烦人的一行一行手工去改了,更可以腾出时间和精力放在其他的地方。
使用VBA的好处不就在于此嘛~~
上面VBA使用的代码分享如下:
Sub fenchai() Dim Rng As Range Dim i&, Col&, Fist, Last, j& Set Rng = Application.InputBox("请选择分拆数据列!", Type:=8) '用户选择数据列 Set Rng = Intersect(Rng.Parent.UsedRange, Rng) 'intersect语句避免用户选择整列造成无谓运算 Col = Rng.Column 'Rng所在列 Fist = Rng.Row 'Rng开始行,用户选择的区域并不是一定从第一行开始,因此需要此句判断 Last = Fist + Rng.Rows.Count - 1 'Rng结束行 Application.ScreenUpdating = False '取消屏幕更新 Application.DisplayAlerts = False '取消消息提醒。当有值单元格被合并时屏蔽提示信息 Rng.Parent.Select '激活Rng对象所在的工作表,避免跨工作表操作问题 For i = Last To Fist Step -1 '对Rng进行从后向前遍历 For j = 1 To Cells(i, Col).Value - 1 Cells(i, Col).Value = 1 Rows(i).Copy Rows(i + j).Insert Shift:=xlDown Application.CutCopyMode = False Next Next End Sub
同样的,永恒君把上面实例VBA的文件分享出来,需要的就直接使用吧。
后台回复实例14即可。
不少人对VBA代码有抵触心理,其实没有那么复杂,把他看成一个稍微复杂点的函数即可。
当然如果并不打算深入学习VBA,只是临时使用下,那只要会复制黏贴就好了!
至于怎么用VBA代码,可以参考之前的文章:
Excel vba 实例(2) - 批量将工作表拆分为单独文件
Excel vba 实例(4) - 根据已有名称,批量新建表格
Excel vba 实例(5) - 快速合并n多个相同值的单元格
Excel vba 实例(6) - 一键汇总多个sheet数据到总表
Excel vba 实例(8)- 利用正则表达式进行定向提取
Excel vba 实例(9)- 批量插入、删除表格中的空行
Excel vba 实例(10)- 统计同一列中出现次数并标注
Excel vba实例(12)-如何合并多个单元格而不丢失单元格的数据?
Excel vba实例(13) - 自动生成序号、一键排版(列宽、行高自适应等)
欢迎交流!
微信公众号:永恒君的百宝箱
个人博客:www.yhjbox.com