ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3275|回复: 22

[求助] VBA对序列号进行分段,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-5-10 13:44 | 显示全部楼层 |阅读模式
具体见附件

按序列分段.zip

6.3 KB, 下载次数: 39

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-12 22:57 | 显示全部楼层
求大神指导

TA的精华主题

TA的得分主题

发表于 2020-5-13 02:35 | 显示全部楼层
设置了动态分段的设置值,可以任意修改分段的范围,

按序列分段.rar

21.15 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2020-5-13 02:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub ceshi()
Dim i, j, k, m, n, LL, HH, MM
Dim arr(), brr()
i = Range("c1040000").End(xlUp).Row - 3
k = 20  '分段的设置范围

MM = 0

m = i \ k   '取商
n = i Mod k '取余数

ReDim arr(1 To i)
For j = 1 To i
    arr(j) = Cells(j + 3, 3) & Cells(j + 3, 4)
Next

If m < 1 Then

    Range("g3").Resize(UBound(arr)) = Application.Transpose(arr)

    Else

    ReDim brr(1 To k, 1 To m + 1)

    For LL = 1 To m

        For HH = 1 To i
            
            MM = MM + 1
            
            brr(HH, LL) = arr(MM)
            
            If (HH Mod k) = 0 Then GoTo 100

        Next
        
100
    Next

    For jj = 1 To n
        
        MM = MM + 1
        brr(jj, LL) = arr(MM)
   
    Next
   
   
    Range("g3").Resize(UBound(brr), UBound(brr, 2)) = brr
End If


For ii = 1 To m + 1

    Cells(2, ii + 6) = "第" & ii & "段"

Next


End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-16 18:52 | 显示全部楼层
谢谢!,不过功能上面还有差异。我要实现的是只要输入初始条码与结束条码号,右边会将该范围内所有的条码(34进制)显示在右边并按每段2000进行排列。

TA的精华主题

TA的得分主题

发表于 2020-5-17 09:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
55555567LN 后为什么不是 J55555567LP ? 而是 J55555568LP 。
image.png

TA的精华主题

TA的得分主题

发表于 2020-5-17 17:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
'凑了一个,条件好象多了,规则也不唯一,,,

Option Explicit

Const NUM As Long = 2000

Sub test()
  Dim s As String, i As Long, mark, m As Long, n As Long, p As Long, a, b, c, d, t, cnt
  t = Timer
  mark = Split("0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z", ",")
  a = c34to10(Right([d4].Value, 2), mark): b = c34to10(Right([d5].Value, 2), mark)
  c = Left([d4].Value, Len([d4].Value) - 2): d = Left([d5].Value, Len([d5].Value) - 2)
  ReDim arr(1 To NUM, 1 To (d - c + 1) / NUM + 1) As String
  m = 0: n = 1: s = [c4].Value
  For i = c To d
    m = m + 1: p = a + cnt
    Do
      arr(m, n) = mark(p Mod 34) & arr(m, n)
      p = p \ 34
    Loop Until p = 0
    arr(m, n) = s & i & arr(m, n)
    If m = NUM Then m = 0: n = n + 1
    cnt = cnt + 1
  Next
  Debug.Print Timer - t, m, n
  [g3].Resize(NUM, n) = arr
  Debug.Print Timer - t
End Sub

Function c34to10(s, mark) As Long
  Dim i, n As Long, dic
  Set dic = CreateObject("scripting.dictionary")
  For i = 0 To UBound(mark)
    dic(mark(i)) = i
  Next
  s = UCase(s)
  For i = 1 To Len(s)
    n = n + dic(Mid(s, i, 1)) * 34 ^ (Len(s) - i)
  Next
  c34to10 = n
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-19 21:23 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-19 21:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
xiangbaoan 发表于 2020-5-17 09:46
55555567LN 后为什么不是 J55555567LP ? 而是 J55555568LP 。

34进制没有I与O

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-19 21:27 | 显示全部楼层
fengjinbiao88 发表于 2020-5-13 02:38
Sub ceshi()
Dim i, j, k, m, n, LL, HH, MM
Dim arr(), brr()

只需要输入起止的条码,不要中间的条码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 00:35 , Processed in 0.043522 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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