ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 把一个工作表按每100行拆分成多个Excel文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-6-28 17:15 | 显示全部楼层
本帖最后由 lrh788 于 2020-6-29 08:51 编辑

Sub 按输入的行数拆分成多簿()
     Dim wbk As Workbook
     Application.ScreenUpdating = False
      t = Timer
      n = Application.InputBox(prompt:="请输入每个表格的行数", Title:="操作提示", Default:=100, Type:=1)
      With Sheet1
         For i = 1 To .Cells(.Rows.Count, 1).End(3).Row Step n
             k = k + 1
             Set wbk = Workbooks.Add
             .Rows(1).Copy wbk.Sheets(1).[a1] '表头
             .Rows(i).Resize(n).Copy wbk.Sheets(1).[a1] '数据
              wbk.Close True, ThisWorkbook.Path & "\" & k
         Next
     End With
     Set wbk = Nothing
     Application.ScreenUpdating = True
     MsgBox "拆分时间:" & Format(Timer - t, "0.000") & "秒"
End Sub
Sub 按输入的行数拆分成多表()
    Dim r%, c%, i%, m%
    Dim arr, brr
    Dim rng As Range
    Dim ws As Worksheet
    t = Timer
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each sht In Worksheets
       If sht.Name <> Sheet1.Name Then sht.Delete
    Next
    m = Application.InputBox(prompt:="请输入每个表格的行数", Title:="操作提示", Default:=100, Type:=1)
      If m = 0 Then
      Exit Sub
    End If
    With Worksheets("Sheet1")
       r = .Cells(.Rows.Count, 1).End(xlUp).Row
       c = .Cells(1, .Columns.Count).End(xlToLeft).Column
       Set rng = .Range(.Cells(1, 1), .Cells(1, c))
    End With
    For i = 2 To r Step m
       Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count))
       With ws
          rng.Copy .Range("a1")
          Worksheets("Sheet1").Cells(i, 1).Resize(m, c).Copy .Range("a2")
       End With
    Next
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
     MsgBox "拆分时间:" & Format(Timer - t, "0.000") & "秒"
End Sub
Sub 按照固定行数拆分多个工作簿()
    Dim r, c, i, n, k, bt As Long
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    t = Timer
    St = Application.FileDialog(msoFileDialogFolderPicker).Show
    If St <> 0 Then
        StFile = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
    Else
        Exit Sub
    End If
    Set Rg = Application.InputBox("请选择标题所在的行(可以单击其中一个单元格)", "选择", Type:=8)
    bt = Rg.Row
    n = Application.InputBox(prompt:="请输入每个表格的行数", Title:="操作提示", Default:=100, Type:=1)
    r = Range("A" & Rows.Count).End(xlUp).Row
    c = Cells(1, Columns.Count).End(xlToLeft).Column
    k = IIf(r - bt Mod r, Int((r - bt) / n), Int((r - bt) / n) + 1)
    For i = 0 To k
        Workbooks.Add
        ActiveWorkbook.SaveAs FileName:=StFile & "\" & "分表" & i & ".xlsx"
        ActiveSheet.Range("A1").Resize(bt, c).Copy ActiveSheet.Range("A1")
        ActiveSheet.Range("A" & bt + i * n + 1).Resize(n, c).Copy ActiveSheet.Range("A" & bt + 1)
        ActiveWorkbook.Close True
    Next
    MsgBox "拆分耗时" & Timer - t & "秒"
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub                                                                                                         

TA的精华主题

TA的得分主题

发表于 2021-7-15 09:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 按输入的行数拆分成多簿()
      Dim wbk As Workbook
      Application.ScreenUpdating = False
       t = Timer
       n = Application.InputBox(prompt:="请输入每个表格的行数", Title:="操作提示", Default:=100, Type:=1)
       With Sheet1
          For i = 1 To .Cells(.Rows.Count, 1).End(3).Row Step n
              k = k + 1
              Set wbk = Workbooks.Add
              .Rows(1).Copy wbk.Sheets(1).[a1] '表头
             .Rows(i).Resize(n).Copy wbk.Sheets(1).[a1] '数据
              wbk.Close True, ThisWorkbook.Path & "\" & k
          Next
      End With
      Set wbk = Nothing
      Application.ScreenUpdating = True
      MsgBox "拆分时间:" & Format(Timer - t, "0.000") & "秒"
End Sub
请教各位老师和大神,此代码按行拆分为多个工作簿后,从第二个工作簿起就没有表头,应如何添加表头?

TA的精华主题

TA的得分主题

发表于 2021-10-14 20:35 | 显示全部楼层
请教各位老师和大神,此代码按行拆分为多个工作簿后,从第二个工作簿起就没有表头,应如何添加表头?

TA的精华主题

TA的得分主题

发表于 2021-10-14 22:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
kxs5555 发表于 2021-10-14 20:35
请教各位老师和大神,此代码按行拆分为多个工作簿后,从第二个工作簿起就没有表头,应如何添加表头?

copy表头所在的行  复制表头

TA的精华主题

TA的得分主题

发表于 2024-9-5 18:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yjjhc 发表于 2020-6-28 08:56
Sub lsc()
    Dim wbk As Workbook
    Application.ScreenUpdating = False

For i = 1 To .Cells(.Rows.Count, 1).End(3).Row Step 100'将1改为2,即从第二行起取数
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 21:52 , Processed in 0.028481 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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