ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 分割文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-12-11 21:20 | 显示全部楼层
自荐一下,我的插件可以按你的要求输出表格
可以先通过数据-表格拆分拼接功能,将一张工作表按照固定的行数拆分为多个工作表,然后再通过工作表-拆分与合并,将每个表输出为单独的Excel文件。
https://club.excelhome.net/thread-1718774-1-1.html

TA的精华主题

TA的得分主题

发表于 2025-12-11 22:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了,感谢分享。

TA的精华主题

TA的得分主题

发表于 2025-12-12 10:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
尝试ai生成:
Sub SplitWorkbookByRows()
    Dim wbOriginal As Workbook
    Dim wsOriginal As Worksheet
    Dim wbNew As Workbook
    Dim wsNew As Worksheet
    Dim LastRow As Long, i As Long, j As Long
    Dim StartRow As Long, EndRow As Long
    Dim TotalRows As Long
    Dim RowsPerFile As Long
    Dim NewFileName As String
    Dim FileCounter As Integer
    Dim fDialog As FileDialog
    Dim OriginalFilePath As String
    Dim OriginalFileName As String
    Dim FileExt As String
    Dim HeaderRange As Range
   
    ' ================== 配置区域 ==================
    RowsPerFile = 200 ' <--- 在这里修改你需要的行数
    ' ============================================
   
    ' 关闭屏幕刷新以提高速度
    Application.ScreenUpdating = False
   
    ' 1. 选择文件
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
    With fDialog
        .Title = "请选择要分割的 Excel 文件"
        .Filters.Clear
        .Filters.Add "Excel 文件", "*.xlsx; *.xlsm"
        .AllowMultiSelect = False
        If .Show <> -1 Then
            MsgBox "未选择文件,操作已取消。"
            Exit Sub
        End If
        OriginalFilePath = .SelectedItems(1)
    End With
   
    ' 2. 打开源文件
    Set wbOriginal = Workbooks.Open(OriginalFilePath)
    Set wsOriginal = wbOriginal.Worksheets(1) ' 默认取第一个工作表
    LastRow = wsOriginal.Cells(wsOriginal.Rows.Count, "A").End(xlUp).Row
   
    ' 简单判断是否有数据(假设第一行是标题,数据从第二行开始)
    If LastRow < 2 Then
        MsgBox "数据不足,无需分割。"
        wbOriginal.Close False
        Exit Sub
    End If
   
    ' 获取原文件信息(用于命名新文件)
    OriginalFileName = Left(wbOriginal.Name, InStrRev(wbOriginal.Name, ".") - 1)
    FileExt = ".xlsx" ' 保存为标准格式
   
    ' 3. 循环分割
    FileCounter = 1
    ' 假设第一行是标题行,所以从第2行开始处理数据
    TotalRows = LastRow - 1
   
    ' 计算需要循环多少次
    Dim NumIterations As Long
    NumIterations = Int((TotalRows - 1) / RowsPerFile) + 1
   
    For i = 1 To NumIterations
        ' 计算起始行和结束行 (数据行号,不包含标题)
        StartRow = (i - 1) * RowsPerFile + 2 ' +2 是因为跳过标题行
        EndRow = Application.Min(StartRow + RowsPerFile - 1, LastRow)
        
        ' 创建新工作簿
        Set wbNew = Workbooks.Add
        Set wsNew = wbNew.Worksheets(1)
        
        ' 复制标题行 (第1行)
        wsOriginal.Rows(1).Copy Destination:=wsNew.Rows(1)
        
        ' 复制数据块
        wsOriginal.Rows(StartRow & ":" & EndRow).Copy Destination:=wsNew.Rows(2)
        
        ' 生成文件名:原名_编号.xlsx
        NewFileName = wbOriginal.Path & "\" & OriginalFileName & "_" & FileCounter & FileExt
        
        ' 保存并关闭新文件
        Application.DisplayAlerts = False ' 覆盖同名文件时不提示
        wbNew.SaveAs Filename:=NewFileName, FileFormat:=xlOpenXMLWorkbook
        wbNew.Close SaveChanges:=False
        Application.DisplayAlerts = True
        
        FileCounter = FileCounter + 1
    Next i
   
    ' 4. 完成
    Application.ScreenUpdating = True
    wbOriginal.Close False ' 关闭原文件不保存
    MsgBox "分割完成!共生成 " & (FileCounter - 1) & " 个文件。", vbInformation, "完成"
   
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-12-16 03:19 , Processed in 0.028705 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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