Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1237|回复: 7

[已解决]按日期自动生成流水号

[复制链接]
发表于 2021-12-13 14:27 | 显示全部楼层 |阅读模式
只要序号一栏不为空,则编码一栏自动按月份生成递增的流水号
如:B12手动输入723,则C12自动生成编号20211215-003
详见附件,请大神们帮忙。谢谢~

最佳答案
2021-12-13 15:39
本帖最后由 林木水 于 2021-12-14 09:55 编辑

代码如下,但是你描述的问题我个人觉得不够严谨,而且直接用函数公式也可以解决的问题尽量不要用vba
编码最后面只有3位数,如果超过3位数就要出错
如果问题得以解决,给最佳

附件如下:
Sub 循环遍历()
Dim sr As String, k As Integer
k = 1
Dim m1 As Integer, m2 As Integer, i As Integer
Dim f As Range, h1 As Integer, h2 As Integer
m1 = Cells(Rows.Count, 2).End(xlUp).Row
m2 = Cells(Rows.Count, 3).End(xlUp).Row
sr = VBA.Format(Date, "yyyymmdd") & "-"
Set f = Range("c:c").Find(sr, searchdirection:=xlPrevious)
If f Is Nothing Then
    For i = m2 + 1 To m1
        Cells(i, 3).Value = sr & VBA.Format(k, "000")
        k = k + 1
    Next i
Else
    k = Right(f.Value, 3) + 1
    For i = m2 + 1 To m1
        Cells(i, 3).Value = sr & VBA.Format(k, "000")
        k = k + 1
    Next i
End If         k=Range("c:c").Find(sr, searchdirection:=xlNext).row  '这一句是为了复原find查找从上往下查找
End Sub



按日期自动生成流水号.zip

11.9 KB, 下载次数: 7

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-12-13 15:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 林木水 于 2021-12-14 09:55 编辑

代码如下,但是你描述的问题我个人觉得不够严谨,而且直接用函数公式也可以解决的问题尽量不要用vba
编码最后面只有3位数,如果超过3位数就要出错
如果问题得以解决,给最佳

附件如下:
Sub 循环遍历()
Dim sr As String, k As Integer
k = 1
Dim m1 As Integer, m2 As Integer, i As Integer
Dim f As Range, h1 As Integer, h2 As Integer
m1 = Cells(Rows.Count, 2).End(xlUp).Row
m2 = Cells(Rows.Count, 3).End(xlUp).Row
sr = VBA.Format(Date, "yyyymmdd") & "-"
Set f = Range("c:c").Find(sr, searchdirection:=xlPrevious)
If f Is Nothing Then
    For i = m2 + 1 To m1
        Cells(i, 3).Value = sr & VBA.Format(k, "000")
        k = k + 1
    Next i
Else
    k = Right(f.Value, 3) + 1
    For i = m2 + 1 To m1
        Cells(i, 3).Value = sr & VBA.Format(k, "000")
        k = k + 1
    Next i
End If         k=Range("c:c").Find(sr, searchdirection:=xlNext).row  '这一句是为了复原find查找从上往下查找
End Sub



1639446599(1).jpg
1639446881(1).jpg

按日期自动生成流水号.rar

21.29 KB, 下载次数: 7

回复

使用道具 举报

发表于 2021-12-13 19:11 | 显示全部楼层
今天才12/13,为什么会有20211215-003,这里的编号前半部分不是当前日期吗?希望把规则详细说明一下。
回复

使用道具 举报

 楼主| 发表于 2021-12-14 08:18 | 显示全部楼层
大灰狼1976 发表于 2021-12-13 19:11
今天才12/13,为什么会有20211215-003,这里的编号前半部分不是当前日期吗?希望把规则详细说明一下。

以日期为分界点,如果当前日期是12月13日,只要序号列增加内容,则编号列自动按20211213-001,20211213-002这样排列下去,上面的附件我只是举例,如:当序号为499时,编号为20211213-499(12月13日一共生成499条),当序号增加到500条时,日期已经是2021年12月14日的,故第500条记录的编号应为:20211214-001(编号自动按日期重新按001计算),序501的编号应为:20211214-002..依次排列下去。当序的第721条为2021年5月15日时,则编号自动生成为:20211215-001。当然:如果流水号为3位数字如果不够的话可以增加为4位,5位,但我的作业3位流水已经足够
回复

使用道具 举报

 楼主| 发表于 2021-12-14 08:21 | 显示全部楼层
林木水 发表于 2021-12-13 15:39
代码如下,但是你描述的问题我个人觉得不够严谨,而且直接用函数公式也可以解决的问题尽量不要用vba
编码 ...

经测试跟你的附图一样,序号3与序号723重复了,都是20211213-003,还有,可否不用点击按钮,只要序号列填入内容后,编号列自动生成与编号列不重复的编号且按日期自动递增排列?谢谢了
回复

使用道具 举报

发表于 2021-12-14 08:23 | 显示全部楼层
change事件,简单的
回复

使用道具 举报

发表于 2021-12-14 09:52 | 显示全部楼层
神秘风暴 发表于 2021-12-14 08:18
以日期为分界点,如果当前日期是12月13日,只要序号列增加内容,则编号列自动按20211213-001,20211213-0 ...

代码已经更新,确实有点小问题,有一个重复的值,第一个值的时候查找到再+1就可以解决,代码修改的地方已经标红色。
祝顺心
回复

使用道具 举报

发表于 2021-12-14 09:56 | 显示全部楼层
林木水 发表于 2021-12-13 15:39
代码如下,但是你描述的问题我个人觉得不够严谨,而且直接用函数公式也可以解决的问题尽量不要用vba
编码 ...

把运行代码放到sheetselectionchange事件就可以自动更新了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-7 12:05 , Processed in 0.284471 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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