ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA根据名称拆分表格

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-1-10 00:34 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 coco122222 于 2023-1-10 06:15 编辑

我想根据名称列里的名称拆分 成文以名称名 命名的表格,总表要求还在的。

有了总表和分表后,在把分表分别另存为工作簿
有老师帮忙写个代码吗
数据量是很大的有很多很多很多很多行

根据名称列里的名称拆分表格.zip

42.4 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2023-1-10 07:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
【新提醒】灵活拆分工具之三-Excel VBA程序开发-ExcelHome技术论坛 -  https://club.excelhome.net/thread-1535151-1-1.html

TA的精华主题

TA的得分主题

发表于 2023-1-10 07:42 | 显示全部楼层
根据名称列里的名称拆分表格.rar (56.43 KB, 下载次数: 22)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-1-10 07:53 | 显示全部楼层
Sub test()
    Set d = CreateObject("scripting.dictionary")
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each sh In Sheets
        If sh.Name <> "总表" Then
            sh.Delete
        End If
    Next sh
    Set sh = Sheets("总表")
    arr = sh.UsedRange
    sh.Select
    For j = 2 To UBound(arr)
        If Len(arr(j, 7)) > 0 Then
            If d.exists(arr(j, 7)) Then
                Set d(arr(j, 7)) = Union(Cells(j, 1), d(arr(j, 7)))
            Else
                Set d(arr(j, 7)) = Union(Cells(j, 1), [a1])
            End If
        End If
    Next j
    For Each k In d.keys
        sh.Copy after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).UsedRange.Clear
        Sheets(Sheets.Count).Name = k
        d(k).EntireRow.Copy Sheets(Sheets.Count).[a1]
        Sheets(Sheets.Count).Copy
        ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & k & ".xlsx"
        ActiveWorkbook.Close True
    Next k
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2023-1-10 07:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
供参考。。。。。。

拆分.zip

121.79 KB, 下载次数: 26

TA的精华主题

TA的得分主题

发表于 2023-1-10 08:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 ykcbf1100 于 2023-1-10 08:55 编辑

参与一下。

总表拆分。

根据名称列里的名称拆分表格.zip

65.33 KB, 下载次数: 23

TA的精华主题

TA的得分主题

发表于 2023-1-10 09:10 | 显示全部楼层
在JS中也是一个经典案例,凑个热闹 image.png

TA的精华主题

TA的得分主题

发表于 2023-1-10 09:11 | 显示全部楼层
附件在此,WPS测试

根据名称列里的名称拆分表格-1.zip

48.65 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-1-10 09:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
题目的要求时,还要另存为独立的工作簿,更新下

根据名称列里的名称拆分表格-1.zip

44.01 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2023-1-11 22:07 | 显示全部楼层
LIUZHU 发表于 2023-1-10 09:10
在JS中也是一个经典案例,凑个热闹

借着 @LIUZHU 老师的这段代码,学习了一下JSA,跟VBA对比,还是有蛮多收获的。


微信截图_20230111215312.png

  • JSA中,数组的功能比VBA中高级太多,如上图中①所示,这段如果用VBA的话就是数组+字典,很难用如此简洁的几句代码实现同样的功能;
  • 在VBA中“With……End With”语句,在JSA中也有类似用法,可以省去很多代码,缺点是没有智能提示了,所有的属性和方法必须手工敲对;(如②所示)
  • 在@LIUZHU 老师的代码中看到②中用数组集体赋值的方式,顿时被惊艳到了
  • 在删除工作表代码中,习惯VBA中用遍历的方式去处理,发现“Delete()”放在循环体内无法正常运行,试着用上图③中所示的方法,运行成功了,搞不清楚原因
  • 习惯写VBA后,JS代码里的“;”老是忘了写,貌似在JSA中,不写也不影响;
  • 对象的属性和方法真的要特别注意大小写(查看了官方文档,属性值写错是没有错误提示的),貌似数组对象的属性和方法都是小写(其他的未验证);
  • 看官方文档说“Value”和“Value2”的区别是前可只读,后者可读写。但是在将单元格区域赋值给二维数组时,必须用“Value2”,好奇怪~

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

本版积分规则

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

GMT+8, 2024-11-19 18:45 , Processed in 0.054698 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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