ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 订单条目不重复拆分

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-24 11:40 | 显示全部楼层

订单2只有两个药品才是对的。否者我把订单1和订单2都上传平台,那销量就超过实际了,多了

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-24 11:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢各位老师。有一些老师的代码虽然与需求不同。但是都是非常值得学习的。谢谢啦。今日花朵已经用完。我下论坛,仔细去学习代码了

TA的精华主题

TA的得分主题

发表于 2023-3-24 11:47 | 显示全部楼层

还有点没有对 就是最后一个订单总要带过来一个重复2次的

TA的精华主题

TA的得分主题

发表于 2023-3-24 11:50 | 显示全部楼层
cjc209 发表于 2023-3-24 11:47
还有点没有对 就是最后一个订单总要带过来一个重复2次的

那再看看吧。

TA的精华主题

TA的得分主题

发表于 2023-3-24 11:50 | 显示全部楼层
增加一列辅助列就好搞 按辅助列中的出现次数分表就对了

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-24 11:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我用了实际数据去测试,有一些问题,生成了三个分表。条目加起来大于总表了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-24 11:54 | 显示全部楼层
本帖最后由 业务员 于 2023-3-24 11:56 编辑
半百 发表于 2023-3-24 11:37
试试。。
Resize(1, 4)里边的4可以改为3或你表中实际的列数。

谢谢老师,很好的代码,我都不用改,直接把配送商放进去,完美。

TA的精华主题

TA的得分主题

发表于 2023-3-24 12:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
业务员 发表于 2023-3-24 11:51
我用了实际数据去测试,有一些问题,生成了三个分表。条目加起来大于总表了。

你先用半百老师的代码吧。
哪个能解决问题就用哪个。

TA的精华主题

TA的得分主题

发表于 2023-3-24 12:55 | 显示全部楼层
这样就不需要做辅助列了
Sub test()
    Set dic = CreateObject("scripting.dictionary")
    Dim arr, brr()
    arr = Sheets(1).UsedRange
    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
    ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + 1)
    For i = 2 To UBound(arr)
        关键字 = arr(i, 1)
        If Not dic.exists(关键字) Then
            dic(关键字) = 1
            arr(i, UBound(arr, 2)) = dic(关键字)
        Else
            dic(关键字) = dic(关键字) + 1
            arr(i, UBound(arr, 2)) = dic(关键字)
        End If
    Next
    dic.RemoveAll
    For i = 1 To UBound(arr)
        dic(arr(i, UBound(arr, 2))) = ""
    Next
    For Each v In dic.keys
        If v > 0 Then
            l = 0
            For i = 1 To UBound(arr)
                If arr(i, UBound(arr, 2)) = v Then
                    l = l + 1
                    For j = 1 To UBound(arr, 2) - 1
                        brr(l, j) = arr(i, j)
                    Next
                End If
            Next
            Sheets.Add
            ActiveSheet.Name = "订单" & v
            ActiveSheet.[a1:c1] = Array("名称", "单位", "数量")
            ActiveSheet.[a2].Resize(l, UBound(brr, 2)) = brr
        End If
    Next
Set dic = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2023-3-24 13:06 | 显示全部楼层
完整代码
Sub test()
    Set dic = CreateObject("scripting.dictionary")
    Dim arr, brr()
    arr = Sheets("Sheet1").[a1].CurrentRegion
    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
    ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + 1)
    Application.DisplayAlerts = False
    For Each sht In Sheets
        If sht.Name <> "Sheet1" Then sht.Delete
    Next sht
    For i = 2 To UBound(arr)
        关键字 = arr(i, 1)
        If Not dic.exists(关键字) Then
            dic(关键字) = 1
            arr(i, UBound(arr, 2)) = dic(关键字)
        Else
            dic(关键字) = dic(关键字) + 1
            arr(i, UBound(arr, 2)) = dic(关键字)
        End If
    Next
    dic.RemoveAll
    For i = 1 To UBound(arr)
        dic(arr(i, UBound(arr, 2))) = ""
    Next
    For Each v In dic.keys
        If v > 0 Then
            l = 0
            For i = 1 To UBound(arr)
                If arr(i, UBound(arr, 2)) = v Then
                    l = l + 1
                    For j = 1 To UBound(arr, 2) - 1
                        brr(l, j) = arr(i, j)
                    Next
                End If
            Next
            Sheets.Add after:=Sheets(Sheets.Count)
            ActiveSheet.Name = "订单" & v
            ActiveSheet.[a1:c1] = Array("名称", "单位", "数量")
            ActiveSheet.[a2].Resize(l, UBound(brr, 2)) = brr
        End If
    Next
    Sheets("Sheet1").Activate
    Application.DisplayAlerts = True
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 14:23 , Processed in 0.035546 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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