ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

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

重复多次,就先计数,然后按计数来进行拆分就好了,这个没有难度啊

TA的精华主题

TA的得分主题

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

我觉得就是加一个辅助列计数不就好了,简单的问题复杂化,按次数来分表就是楼主的意思,一点难度没有。个个代码都写得这么复杂,哎。

TA的精华主题

TA的得分主题

发表于 2023-3-25 14:27 | 显示全部楼层
请测试

我是根据次数生成新的工作簿,这个应该能直接上传到系统吧
2023-03-25_142701.png

订单分拆3.rar (20.45 KB, 下载次数: 5)

TA的精华主题

TA的得分主题

发表于 2023-3-25 15:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub SplitSheet()
    Dim lastRow As Long, lastColumn As Long, i As Long, j As Long
    Dim dict As Object, ws As Worksheet
    Set dict = CreateObject("scripting.dictionary")
   
    lastRow = ActiveSheet.Cells(Rows.count, "A").End(xlUp).Row
    lastColumn = ActiveSheet.Cells(1, Columns.count).End(xlToLeft).Column
    '插入新列
    ActiveSheet.Columns(lastColumn + 1).Insert
    '设置新列的值
    For i = 2 To lastRow
        ActiveSheet.Cells(i, lastColumn + 1).Value = WorksheetFunction.CountIf(Range("A$1:A" & i), Range("A" & i).Value)
    Next i
   
    '针对新列中每个值,加入字典
    For i = 2 To lastRow
        If Not dict.Exists(ActiveSheet.Cells(i, lastColumn + 1).Value) Then
            dict.Add ActiveSheet.Cells(i, lastColumn + 1).Value, 1
        End If
    Next i
   
    '按照新列中不同的值,将sheet1分成多个工作表
    For Each Key In dict.keys
        Set ws = Worksheets.Add(after:=Worksheets(Worksheets.count))
        ws.Name = Key
        ws.Range("A1", ws.Cells(1, lastColumn)).Value = Sheet1.Range("A1", Sheet1.Cells(1, lastColumn)).Value

        j = 2
        For i = 2 To lastRow
            If Sheet1.Cells(i, lastColumn + 1).Value = Key Then
                ws.Range("A" & j, ws.Cells(j, lastColumn)).Value = Sheet1.Range("A" & i, Sheet1.Cells(i, lastColumn)).Value

                j = j + 1
            End If
        Next i
    Next Key
   
    '删除新列
    Sheet1.Cells(1, lastColumn + 1).EntireColumn.Delete

End Sub

TA的精华主题

TA的得分主题

发表于 2023-3-25 16:26 | 显示全部楼层
业务员 发表于 2023-3-25 07:40
我贴的是半百老师的,我测试无问题。您的代码有些小问题呢

的确,最后输出写错了一个
With .Sheets(1).[A1].Resize(r, UBound(br, 2))
                .Value = br
                .Borders.LineStyle = xlContinuous
                .EntireColumn.AutoFit
                .EntireRow.AutoFit
            End With

TA的精华主题

TA的得分主题

发表于 2023-3-25 18:57 | 显示全部楼层
简化了一下代码,快那么一点点

2023-03-25_185626.png

TA的精华主题

TA的得分主题

发表于 2023-3-25 21:21 | 显示全部楼层
增加个辅助列,用计数函数,再用数据透视表按数字分表就好了,

TA的精华主题

TA的得分主题

发表于 2023-3-29 11:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
半百 发表于 2023-3-24 11:37
试试。。
Resize(1, 4)里边的4可以改为3或你表中实际的列数。

思路清晰简洁,值得借鉴学习。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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