ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: whoisghost

[建议&疑问] 求助,如何一次整理排序计数啊

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-24 21:37 来自手机 | 显示全部楼层
whoisghost 发表于 2018-3-24 21:36
总计的结果一直都是1,不能全部统计出来

等一下,我在电脑上调试一下看

TA的精华主题

TA的得分主题

发表于 2018-3-24 21:52 | 显示全部楼层
whoisghost 发表于 2018-3-24 21:36
总计的结果一直都是1,不能全部统计出来

我再电脑上试了,是正常的结果

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-24 22:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jiaxinl 发表于 2018-3-24 21:52
我再电脑上试了,是正常的结果

.....我这里试了一下,还是一样,总计还是只显示1,是我哪里改错了么

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-25 21:15 | 显示全部楼层
jiaxinl 发表于 2018-3-24 21:52
我再电脑上试了,是正常的结果

Sub 整理_排序_计数_2()
     Dim d, r, mh, sr$, i&, j&, k&, m&, n&, x&, y&, p&, rr&, zj&
     Set d = CreateObject("scripting.dictionary")     '引用字典
    With Sheet1
         .Range("A1:L" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents  '清除原有的数据
'        Application.Wait (Now + TimeValue("00:00:03")) '延迟3秒的时间再执行下句代码
        Application.ScreenUpdating = False
                 Set r = CreateObject("VBScript.Regexp") '正则
                 r.Pattern = "(\d+)" '正则表达式
                 sr = Trim(.Range("M1"))
l:     '标签L处
                 If r.test(sr) Then '能匹配数字
                    Set mh = r.Execute(sr)
                     d(mh(0).SubMatches(0)) = d(mh(0).SubMatches(0)) + 1 '装入字典并计数
                    zj = j + 1
                     sr = r.Replace(sr, "$") '替换已提取的数字
                    GoTo l '跳转到标签L处
                 End If
         .Range("AA1:AB" & .Cells(.Rows.Count, "AA").End(xlUp).Row).ClearContents  '清除原有的数据
        .Range("AA1").Resize(d.Count, 1) = Application.Transpose(d.keys) '转置字典的关键字写入单元格
        .Range("AB1").Resize(d.Count, 1) = Application.Transpose(d.items) '转置字典的项目写入单元格
       If Right(sr, 1) <> "$" Then
           .Range("AA" & d.Count) = .Range("AA" & d.Count) & Right(sr, Len(sr) - mh(0).FirstIndex - 1)
             rr = d.Count - 1
         Else
             rr = d.Count
        End If
         .Sort.SortFields.Clear
         .Sort.SortFields.Add Key:=Range("AA1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         With .Sort '排序
            .SetRange Range("AA1:AB" & rr)
             .Apply
         End With
         arr = .Range("AA1:AB" & .Cells(.Rows.Count, "AA").End(xlUp).Row)
         .Range("AA1:AB" & .Cells(.Rows.Count, "AA").End(xlUp).Row).ClearContents
         k = Application.WorksheetFunction.RoundUp(UBound(arr) / 11, 0)
         k = Application.WorksheetFunction.RoundUp((UBound(arr) + k) / 11, 0)
         ReDim brr(1 To k * 2 + 1, 1 To 12)
         brr(k * 2 + 1, 1) = "总计"
         brr(k * 2 + 1, 2) = zj
         y = 1: n = 1: p = 1
ll:
         j = y: m = n: x = 1
         brr(m * 2 - 1, 1) = "货号"
         brr(m * 2, 1) = "数量"
         For i = j To UBound(arr) - 1
              x = x + 1
             If x > 12 Then brr((m + 1) * 2 - 1, 2) = arr(i - 1, 1): brr((m + 1) * 2, 2) = arr(i - 1, 2): y = i - 1: n = n + 1: p = 2: s = 1: GoTo ll
             If p > 1 Then
                 On Error Resume Next
                 brr(m * 2 - 1, x + 1) = arr(i + 1, 1)
                 brr(m * 2, x + 1) = arr(i + 1, 2)
             Else
                 brr(m * 2 - 1, x) = arr(i, 1)
                 brr(m * 2, x) = arr(i, 2)
             End If
         Next i
         .Range("A1").Resize(UBound(brr), 12) = brr
     End With
     Set d = Nothing
     Set r = Nothing
     MsgBox "整理-排序-计数  已完成!", 64, "提示!"
End Sub
你看看是不是哪里有问题,我这里显示的始终不对

TA的精华主题

TA的得分主题

发表于 2018-3-25 22:43 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
whoisghost 发表于 2018-3-25 21:15
Sub 整理_排序_计数_2()
     Dim d, r, mh, sr$, i&, j&, k&, m&, n&, x&, y&, p&, rr&, zj&
     Set ...

这句你改错了

zj = j + 1

改为

zj = zj + 1

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-25 23:48 | 显示全部楼层
jiaxinl 发表于 2018-3-25 22:43
这句你改错了

zj = j + 1

谢谢,是我疏忽了,谢谢你的帮助
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 21:02 , Processed in 0.041250 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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