ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 339|回复: 20

[求助] 用VBA将数据拆分保存成多个workbook

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-6 16:41 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 小行星B612612 于 2024-6-6 18:40 编辑

小白求助, 有一页worksheet中的数据有多行, 从第4行开始,每500行保存为一个workbook, 名称为拆分1,拆分2,拆分3....

每个拆分出来的数据都带着原来worksheet前3行的字段及说明。
谢谢大神~~~~

拆分.7z

75.36 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2024-6-6 16:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-6 17:02 | 显示全部楼层
下载了一个空文件夹,没有看到任何附件

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-6 18:29 | 显示全部楼层
  1. Sub test0()
  2.   
  3.   Dim maxRow As Long, titleRow As Long
  4.   
  5.   titleRow = 3
  6.   maxRow = titleRow + 500
  7.   
  8.   DoApp False
  9.   
  10.   Dim data, i As Long, j As Long, k As Long, rowSize As Long
  11.   Dim strPath As String, strName As String, wks As Worksheet
  12.   
  13.   strPath = ThisWorkbook.Path & Application.PathSeparator & "分簿"
  14.   If Dir(strPath, vbDirectory) = "" Then MkDir strPath
  15.   strPath = strPath & Application.PathSeparator
  16.   
  17.   Set wks = ActiveSheet
  18.   data = wks.Range("A1").CurrentRegion.Value
  19.   
  20.   rowSize = titleRow
  21.   For i = titleRow + 1 To UBound(data)
  22.     rowSize = rowSize + 1
  23.     For j = 1 To UBound(data, 2)
  24.       data(rowSize, j) = data(i, j)
  25.     Next
  26.     If rowSize = maxRow Then
  27.       k = k + 1
  28.       strName = "拆分" & k
  29.       wks.Copy
  30.       With ActiveWorkbook
  31.         With .Worksheets(1)
  32.           .Range("A1").Resize(rowSize, j - 1) = data
  33.           .UsedRange.Offset(, j - 1).Clear
  34.           .UsedRange.Offset(rowSize).Clear
  35.           .DrawingObjects.Delete
  36.           .Name = strName
  37.         End With
  38.         .SaveAs strPath & strName, 51
  39.         .Close
  40.       End With
  41.       rowSize = titleRow
  42.     End If
  43.   Next
  44.   
  45.   If rowSize > titleRow Then
  46.     k = k + 1
  47.     strName = "拆分" & k
  48.     wks.Copy
  49.     With ActiveWorkbook
  50.       With .Worksheets(1)
  51.         .Range("A1").Resize(rowSize, j - 1) = data
  52.         .UsedRange.Offset(, j - 1).Clear
  53.         .UsedRange.Offset(rowSize).Clear
  54.         .DrawingObjects.Delete
  55.         .Name = strName
  56.       End With
  57.       .SaveAs strPath & strName, 51
  58.       .Close
  59.     End With
  60.   End If
  61.   
  62.   Set wks = Nothing
  63.   DoApp
  64.   Beep
  65. End Sub

  66. Function DoApp(Optional b As Boolean = True)
  67.   With Application
  68.     .ScreenUpdating = b
  69.     .DisplayAlerts = b
  70.     .Calculation = -b * 30 - 4135
  71.   End With
  72. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2024-6-6 18:35 | 显示全部楼层
哪位大哥帮我看看excel怎么拆分每个文件都是1万个数据,每个文件第一行标题需要保留-Excel基础应用-ExcelHome技术论坛 -  https://club.excelhome.net/forum ... amp;_dsign=7c644ad4

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-6 18:41 | 显示全部楼层

不好意思,更新了,谢谢大神~~帮忙看看~~

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-6 18:41 | 显示全部楼层
LIUZHU 发表于 2024-6-6 17:02
下载了一个空文件夹,没有看到任何附件

不好意思,更新了,谢谢大神~~帮忙看看~~

TA的精华主题

TA的得分主题

发表于 2024-6-6 19:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
拆分效果演示
image.png

TA的精华主题

TA的得分主题

发表于 2024-6-6 19:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
JSA代码,主要是JS可以对数组进行切片操作
  1. function 拆分(){
  2.         const arr=Range("a1").CurrentRegion.Value2;
  3.         const bt=arr.slice(0,3);
  4.         let i=-1;
  5.         [Application.DisplayAlerts,Application.ScreenUpdating]=[false,false];
  6.         while(true){
  7.                 let min=++i*500 + 3, max=min + 500;
  8.                 if (min>arr.length) break;
  9.                 let res=bt.concat(arr.slice(min,max));
  10.                 Workbooks.Add().SaveAs(`${ThisWorkbook.Path}\\${String(i+1).padStart(3,"0")}.xlsx`);
  11.                 Range("a1").Resize(res.length,res[0].length).Value2=res;
  12.                 ActiveWorkbook.Close(true);
  13.         }
  14.         [Application.DisplayAlerts,Application.ScreenUpdating]=[true,true];
  15. }
复制代码

TA的精华主题

TA的得分主题

发表于 2024-6-6 19:10 | 显示全部楼层
附件,请审核,WPS

拆分.zip

19.56 KB, 下载次数: 3

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

本版积分规则

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

GMT+8, 2024-6-20 23:10 , Processed in 0.035693 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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