自动化单号生成:制造业的日期累加解决方案 点击使用AI助手 了解更多

发布于 2024-11-14 liusiyang 14 编辑

之前我们发过一期将单据保存为明细的帖子,有小伙伴问其中的单号是怎么根据当天日期自动累加的,下面就为大家详细讲解一下。

【案例描述】

其实像这样自动根据当前日期生成单号,并实现自动累的案例,在制造业经常用到,比如订货单、生产单、出库单等。

如下图,当前日期是“2023年11月17日”,当我们保存第一单的时候,单号为“20231117001”,保存第二单的时候,则变为“20231117002”,第三单“20231117003”……,依次累加。当我们选择别的日期时,也能达到同样的效果,即总是根据所选择日期已有的最大单号加1。

【操作效果】

【实现过程】

其实这个问题并不需要复杂的代码,只需要一个公式就可以解决。

公式:

=IFERROR(LOOKUP(1,0/(LEFT(出库明细!A2:A65535,8)=TEXT(F5,"yyyymmdd")),出库明细!A2:A65535)+1,TEXT(F5,"yyyymmdd")&"001")

公式说明:

先用LOOKUP在明细表A列中查找日期(F5单元格),如果能找到,就直接加1,如果不能找到,就直接用日期加上“001”。

公式详解:

  • TEXT(F5,"yyyymmdd")——将日期格式化,即将“2023年11月17”转换为“20231117”;

  • LEFT(出库明细!A2:A65535,8)=TEXT(F5,"yyyymmdd")——判断明细表A列中已有单号的前8位是否与格式化后的日期相同;

  • LOOKUP(1,0/(LEFT(出库明细!A2:A65535,8)=TEXT(F5,"yyyymmdd")),出库明细!A2:A65535)+1——如果日期相同,则返回该单号,并且+1,则得到新的单号;

  • IFERROR(LOOKUP(1,0/(LEFT(出库明细!A2:A65535,8)=TEXT(F5,"yyyymmdd")),出库明细!A2:A65535)+1,TEXT(F5,"yyyymmdd")&"001")——如果在明细表A列中找不到当前日期,则直接用当前日期格式化后连接上“001”,即作为当天的第一个单号。

公式固化:

为防止不小心动到公式,我们可以将公式写到JS代码中,即使动到了,也可以在点击清空按钮的时候重新自动输入公式。

Range("k3").Value2 = "=IFERROR(LOOKUP(1,0/(LEFT(出库明细!A2:A65535,8)=TEXT(F5,\"yyyymmdd\")),出库明细!A2:A65535)+1,TEXT(F5,\"yyyymmdd\")&\"001\")"

当然,这样的功能必须要配合代码使用,因为单纯的公式,是不能将自身产生的结果保存下来的,只有将上一个单号保存到明细表中,才能实现下一个单号的累加,所以我们需要一段保存代码。

📌

function 保存出库单(){

n1 = Range("c18").End(3).Row //物品信息最后行号

let sh = Sheets("出库明细") //将出库明细表定义为sh

n2 = sh.Range("A65535").End(3).Row + 1 //获取出库明细表最后一行的下一行号

n3 = n2+n1-7 //得到出库明细最后一行加上物品行数之后的行号

sh.Range("a" + n2+":a"+n3).Value2 = Range("k3").Value2 //单号

sh.Range("b" + n2+":b"+n3).Value2 = Range("f5").Value2 //日期

Range("c7:k"+n1).Copy() //复制物品信息

sh.Range("c" + n2).PasteSpecial(xlPasteValues) //粘贴物品信息

sh.Range("L" + n2+":L"+n3).Value2 = Range("c4").Value2 //供应商

sh.Range("m" + n2+":m"+n3).Value2 = Range("c5").Value2 //供应商联系人

sh.Range("n" + n2+":n"+n3).Value2 = Range("k5").Value2 //经办人

出库单清空()

MsgBox("保存成功!")

}

【素材下载】

https://kdocs.cn/l/ctI21tz6E5uO

原文链接:https://bbs.wps.cn/topic/11920

上一篇: WPS从入门到熟练的快速指南
下一篇: WPS稻壳模板库:800万素材,一键美化你的文档!
相关文章