Excel精英培训网

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

[已解决]求各位老师帮忙看一下怎么生成流水单号

[复制链接]
发表于 2016-6-24 08:50 | 显示全部楼层 |阅读模式
根据日期生成前缀我可以用公式拉出来一列,其他问题不知道不知如何下手{:021:},请各位老师看看{:091:}
最佳答案
2016-6-24 10:39
VBA问题.rar (9.23 KB, 下载次数: 28)

效果如图

效果如图

VBA问题.rar

3.31 KB, 下载次数: 9

问题也可以在附件里看到

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-6-24 10:25 | 显示全部楼层
  1. Sub xx()
  2.     Dim arr, brr(), d, n%, i%, str$
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     With Sheet1
  5.         n = .Cells(.Rows.Count, 2).End(xlUp).Row
  6.         arr = .Range("B2:C" & n)
  7.         str = "I" & Mid(arr(1, 1), 3, 2) & Format(Month(arr(1, 1)), "00") & "001"
  8.         ReDim Preserve brr(1 To 1)
  9.         brr(1) = str
  10.         x = 1
  11.         For i = 2 To n - 1
  12.             ReDim Preserve brr(1 To i)
  13.             If x < 3 And arr(i, 1) = arr(i - 1, 1) And arr(i, 2) = arr(i - 1, 2) Then
  14.                 brr(i) = str
  15.                 x = x + 1
  16.             Else
  17.                 str = "I" & Mid(arr(i, 1), 3, 2) & Format(Month(arr(i, 1)), "00") & Format(Right(str, 3) + 1, "000")
  18.                 brr(i) = str
  19.                 x = 1
  20.             End If
  21.         Next
  22.         .Range("D2:D" & n) = Application.WorksheetFunction.Transpose(brr)
  23.     End With
  24. End Sub
复制代码
回复

使用道具 举报

发表于 2016-6-24 10:39 | 显示全部楼层    本楼为最佳答案   
VBA问题.rar (9.23 KB, 下载次数: 28)
回复

使用道具 举报

 楼主| 发表于 2016-6-24 11:08 | 显示全部楼层
zjdh 发表于 2016-6-24 10:39

谢谢老师,这就是我想要的结果,真的非常感谢!
回复

使用道具 举报

发表于 2016-6-24 11:23 | 显示全部楼层
  1. Sub tt()
  2.     arr = [a1].CurrentRegion
  3.     Set d = CreateObject("scripting.dictionary")
  4.     For i = 2 To UBound(arr)
  5.         x = arr(i, 2) & arr(i, 3)
  6.         d(x) = d(x) + 1
  7.         If d(x) Mod 3 = 1 Then lsh = lsh + 1
  8.         arr(i, 4) = "I1601" & Format(lsh, "000")
  9.     Next
  10.     [d1].Resize(UBound(arr)) = Application.Index(arr, , 4)
  11. End Sub
复制代码

VBA问题.rar

15.28 KB, 下载次数: 11

回复

使用道具 举报

发表于 2016-6-24 11:32 | 显示全部楼层
考虑到日期改变引起前缀变化,或者数据有可能乱序,代码修改如下:
  1. Sub tt()
  2.     arr = [a1].CurrentRegion
  3.     Set d = CreateObject("scripting.dictionary")
  4.     For i = 2 To UBound(arr)
  5.         x = arr(i, 2) & arr(i, 3)
  6.         y = Format(arr(i, 2), "yymm")
  7.         If Not d.exists(y) Then d(y) = 0
  8.         d(x) = d(x) + 1
  9.         If d(x) Mod 3 = 1 Then d(y) = d(y) + 1
  10.         arr(i, 4) = "l" & y & Format(d(y), "000")
  11.     Next
  12.     [d1].Resize(UBound(arr)) = Application.Index(arr, , 4)
  13. End Sub
复制代码

评分

参与人数 1 +6 收起 理由
today0427 + 6 棒!v587!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 06:12 , Processed in 0.263606 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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