Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1584|回复: 4

[已解决]跪求大神来段分表代码

[复制链接]
发表于 2017-3-17 08:59 | 显示全部楼层 |阅读模式
小弟工作遇到麻烦。附件内表格上级要求一户一表。就是把附件里面的每张表格单独提取出来变成独立的EXCEL表格,再命名成户主名字,附件只是一部分,还有几千个农户的表格要弄,跪求大神帮忙,可不可以给段代码一次性搞定的?
最佳答案
2017-3-18 14:16
Public Sub qq()
Dim rgn As Range
Dim name1 As String
Dim m As String
Dim n As Long
Dim wb As Workbook
Dim snamefile As String
Dim i As Long
n = 1
Application.ScreenUpdating = False



For Each rgn In ThisWorkbook.Sheets("1").UsedRange
    If rgn.Value = "户主" Then
        name1 = rgn.Offset(0, -2)
    End If
   
    If rgn.Value Like "*调查记事:填写:1)承包方代表变更情况;*" Then
        If n = 1 Then
            n = rgn.Row
            m = "1" & ":" & n
        Else
            m = n + 1 & ":" & rgn.Row
            n = rgn.Row
        End If
    snamefile = ThisWorkbook.Path & "\" & name1 & ".xlsx"
    Set wb = Workbooks.Add
    ThisWorkbook.Sheets("1").Rows(m).Copy Sheets("sheet1").Range("a1")
    If nameexists(snamefile) Then
        i = 0
        Do
        i = i + 1
        snamefile = ThisWorkbook.Path & "\" & name1 & i & ".xlsx"
        Loop While nameexists(snamefile)
    End If
        
        wb.SaveAs Filename:=snamefile
    wb.Close
    End If
Next

Application.ScreenUpdating = True


End Sub




Public Function nameexists(sname As String) As Boolean
If Dir(sname) <> "" Then
nameexists = True
End If


End Function
考虑户主重名情况,重名后再名字后加数字序列号

农户承包地登记基本信息摸底调查表一乌丹山片 - 副本.rar

30.12 KB, 下载次数: 11

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2017-3-17 10:22 | 显示全部楼层
回复

使用道具 举报

发表于 2017-3-18 07:34 | 显示全部楼层

Public Sub qq()
Dim rgn As Range
Dim name1 As String
Dim m As String
Dim n As Long
Dim wb As Workbook
n = 1
Application.ScreenUpdating = False



For Each rgn In ThisWorkbook.Sheets("1").UsedRange
    If rgn.Value = "户主" Then
        name1 = rgn.Offset(0, -2)
    End If
   
    If rgn.Value Like "*调查记事:填写:1)承包方代表变更情况;*" Then
        If n = 1 Then
            n = rgn.Row
            m = "1" & ":" & n
        Else
            m = n + 1 & ":" & rgn.Row
            n = rgn.Row
        End If
    Set wb = Workbooks.Add
    ThisWorkbook.Sheets("1").Rows(m).Copy Sheets("sheet1").Range("a1")
    wb.SaveAs ThisWorkbook.Path & "\" & name1 & ".xlsx"
    wb.Close
    End If
Next

Application.ScreenUpdating = True


End Sub
文件增加到代码所在工作簿目录。
源文件格式有变化,不是固定行数,所以以表格最后一行作为结束判断。如确保每个表的最后一行一致,可以正确拆分。
没有考虑户主重名情况
回复

使用道具 举报

发表于 2017-3-18 14:16 | 显示全部楼层    本楼为最佳答案   
Public Sub qq()
Dim rgn As Range
Dim name1 As String
Dim m As String
Dim n As Long
Dim wb As Workbook
Dim snamefile As String
Dim i As Long
n = 1
Application.ScreenUpdating = False



For Each rgn In ThisWorkbook.Sheets("1").UsedRange
    If rgn.Value = "户主" Then
        name1 = rgn.Offset(0, -2)
    End If
   
    If rgn.Value Like "*调查记事:填写:1)承包方代表变更情况;*" Then
        If n = 1 Then
            n = rgn.Row
            m = "1" & ":" & n
        Else
            m = n + 1 & ":" & rgn.Row
            n = rgn.Row
        End If
    snamefile = ThisWorkbook.Path & "\" & name1 & ".xlsx"
    Set wb = Workbooks.Add
    ThisWorkbook.Sheets("1").Rows(m).Copy Sheets("sheet1").Range("a1")
    If nameexists(snamefile) Then
        i = 0
        Do
        i = i + 1
        snamefile = ThisWorkbook.Path & "\" & name1 & i & ".xlsx"
        Loop While nameexists(snamefile)
    End If
        
        wb.SaveAs Filename:=snamefile
    wb.Close
    End If
Next

Application.ScreenUpdating = True


End Sub




Public Function nameexists(sname As String) As Boolean
If Dir(sname) <> "" Then
nameexists = True
End If


End Function
考虑户主重名情况,重名后再名字后加数字序列号
回复

使用道具 举报

 楼主| 发表于 2017-3-20 09:36 | 显示全部楼层
wenzili 发表于 2017-3-18 14:16
Public Sub qq()
Dim rgn As Range
Dim name1 As String

太厉害了 谢谢大神。省了我好多事
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-26 22:37 , Processed in 0.307171 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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