设为首页收藏本站

 找回密码
 立即注册
搜索
查看: 49|回复: 3

请教各位大神,这个拆分出来的文件为啥只有一条记录?

[复制链接]

尚未签到

灌水成绩
4
24
40
主题
帖子
积分

等级头衔 ID : 850
用户组 : 新手上路

积分成就 测量币 : 40
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

发表于 前天 16:57 | 显示全部楼层 |阅读模式 IP:北京
各位大神:

      菜鸟来求助了,有个文件需要进行拆分,例如附件里的信息同一个合同编号同一个供应商的多条记录拆成一个文件,目前和同事一起研究了一套代码出来,但拆分出来的文件只有一条记录!
      请问这代码是哪里出错了,先跪谢了!
文件里第一个表是信息清单,第二个表是代码
需要拆分的文件.rar (12.41 KB, 下载次数: 0)
测量协会论坛免责声明
重要声明:以上内容仅代表该作者观点,不代表本站测量协会论坛立场。
如有涉及侵权请尽快告知,我们将会在第一时间处理。作者原创内容未经允许不得转载!
站长联系邮箱:1339305021@qq.com
站长联系微信:dddnnbbb
累计签到:1 天
连续签到:1 天
灌水成绩
0
19
12
主题
帖子
积分

等级头衔 ID : 833
用户组 : 新手上路

积分成就 测量币 : 12
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-24

勋章

活跃会员最佳新人

联系方式

发表于 前天 17:06 | 显示全部楼层 IP:北京
Sub 按供应商_合同编号_拆分_多条记录()
    Dim ws As Worksheet
    Dim newWb As Workbook
    Dim lastRow As Long
    Dim i As Long
    Dim savePath As String
    Dim dict As Object
    Dim key As Variant
    Dim 合同编号 As String, 供应商名称 As String
   
    ' 关闭弹窗
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
   
    ' 你的表
    Set ws = ActiveSheet
    savePath = ThisWorkbook.Path & "\"
   
    ' 字典:按 合同编号|供应商 分组
    Set dict = CreateObject("Scripting.Dictionary")
   
    ' 自动找最后一行(G列合同编号)
    lastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row

    ' 第一步:收集所有唯一组合
    For i = 4 To lastRow
        合同编号 = Trim(ws.Cells(i, "G").Value)
        供应商名称 = Trim(ws.Cells(i, "L").Value)
        
        If 合同编号  "" And 供应商名称  "" Then
            dict(合同编号 & "|" & 供应商名称) = 供应商名称
        End If
    Next i

    ' 第二步:生成文件
    For Each key In dict.Keys
        合同编号 = Split(key, "|")(0)
        供应商名称 = dict(key)
        
        ' 新文件
        Set newWb = Workbooks.Add(xlWBATWorksheet)
        
        ' 复制表头(1–3行)
        ws.Rows("1:3").Copy newWb.Sheets(1).Range("A1")
        
        ' ↓↓↓ 关键修复:循环复制所有匹配行 ↓↓↓
        For i = 4 To lastRow
            If Trim(ws.Cells(i, "G").Value) = 合同编号 _
               And Trim(ws.Cells(i, "L").Value) = 供应商名称 Then
               
                ' 粘贴到下一行
                ws.Rows(i).Copy _
                newWb.Sheets(1).Cells(newWb.Sheets(1).Rows.Count, "A").End(xlUp).Offset(1, 0)
            End If
        Next i
        
        ' 列宽自适应
        newWb.Sheets(1).UsedRange.Columns.AutoFit
        
        ' 保存:只留供应商名称
        newWb.SaveAs savePath & 供应商名称 & ".xlsx", xlOpenXMLWorkbook
        newWb.Close SaveChanges:=False
    Next key

    ' 恢复
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
   
    MsgBox "拆分完成!每个文件都包含【全部多条记录】!" & vbCrLf & "保存到:" & savePath

End Sub
回复

使用道具 举报

尚未签到

灌水成绩
2
20
20
主题
帖子
积分

等级头衔 ID : 811
用户组 : 新手上路

积分成就 测量币 : 20
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-25

勋章

活跃会员最佳新人

联系方式

发表于 前天 19:02 | 显示全部楼层 IP:北京

你没有一次一次去判断行的位置
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
灌水成绩
0
24
25
主题
帖子
积分

等级头衔 ID : 864
用户组 : 新手上路

积分成就 测量币 : 25
违规 : 0
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-4-24

勋章

活跃会员最佳新人

联系方式

发表于 前天 19:03 | 显示全部楼层 IP:北京
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|测量协会 ( 桂ICP备2026007449号-1 )|网站地图

GMT+8, 2026-4-26 01:38 , Processed in 0.280902 second(s), 67 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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