ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 按指定单元格分列,哪位大神能帮忙解读一下代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-16 15:59 | 显示全部楼层 |阅读模式
如附件,代码已OK,现在有新的需求:按分公司拆分并保留原表的格式,要如何修改呢
需求为:拆分后按分公司形成单独的Excel文件,每个文件中依旧保留2个sheet(此分公司对应数据保留)

测试2.7z

21.9 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2020-3-16 16:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub NewShts()
  2.     Dim d As Object, sht As Worksheet, arr, brr, r, kr, i&, j&, k&, x&
  3.     Dim Rng As Range, Rg As Range, tRow&, tCol&, aCol&, pd&
  4.     Application.ScreenUpdating = False '关闭屏幕更新
  5.     Application.DisplayAlerts = False '关闭警告信息提示
  6.     Set d = CreateObject("scripting.dictionary") 'set字典
  7.     Set Rg = Application.InputBox("请框选拆分依据列!只能选择单列单元格区域!", Title:="提示", Type:=8)
  8.     '用户选择的拆分依据列
  9.     tCol = Rg.Column '取拆分依据列列标
  10.     tRow = Val(Application.InputBox("请输入总表标题行的行数?"))
  11.     '用户设置总表的标题行数
  12.     If tRow = 0 Then MsgBox "你未输入标题行行数,程序退出。": Exit Sub
  13.     Set Rng = ActiveSheet.UsedRange '总表的数据区域
  14.     arr = Rng '数据范围装入数组arr
  15.     tCol = tCol - Rng.Column + 1 '计算依据列在数组中的位置
  16.     aCol = UBound(arr, 2) '数据源的列数
  17.     For i = tRow + 1 To UBound(arr) '遍历数组arr
  18.         If Not d.exists(arr(i, tCol)) Then
  19.             d(arr(i, tCol)) = i '字典中不存在关键词则将行号装入字典
  20.         Else
  21.             d(arr(i, tCol)) = d(arr(i, tCol)) & "," & i '如果存在则合并行号,以逗号间隔
  22.         End If
  23.     Next
  24.     For Each sht In Worksheets '遍历一遍工作表,如果字典中存在则删除
  25.         If d.exists(sht.Name) Then sht.Delete
  26.     Next
  27.     kr = d.keys '字典的key集
  28.     For i = 0 To UBound(kr) '遍历字典key值
  29.         If kr(i) <> "" Then '如果key不为空
  30.             r = Split(d(kr(i)), ",") '取出item里储存的行号
  31.             ReDim brr(1 To UBound(r) + 1, 1 To aCol) '声明放置结果的数组brr
  32.             k = 0
  33.             For x = 0 To UBound(r)
  34.                 k = k + 1 '累加记录行数
  35.                 For j = 1 To aCol '循环读取列
  36.                     brr(k, j) = arr(r(x), j)
  37.                 Next
  38.             Next
  39.             With Worksheets.Add(, Sheets(Sheets.Count))
  40.             '新建一个工作表,位置在所有已存在sheet的后面
  41.                 .Name = kr(i) '表格命名
  42.                 .[a1].Resize(tRow, aCol) = arr '放标题行
  43.                 .[a1].Offset(tRow, 0).Resize(k, aCol) = brr '放置数据区域
  44.                 Rng.Copy '复制粘贴总表的格式
  45.                 .[a1].PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  46.                 .[a1].Select
  47.             End With
  48.         End If
  49.     Next
  50.     Sheets(1).Activate '激活第一个表格
  51.     Set d = Nothing '释放字典
  52.     Erase arr: Erase brr '释放数组
  53.     MsgBox "数据拆分完成!"
  54.     Application.ScreenUpdating = True '恢复屏幕更新
  55.     Application.DisplayAlerts = True '恢复警示
  56. End Sub
复制代码



这有大佬写过

TA的精华主题

TA的得分主题

发表于 2020-3-16 17:35 | 显示全部楼层
拆分文件,论坛里有很多案例可以参考,搜索并学习一下就是了

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-16 18:01 | 显示全部楼层
microyip 发表于 2020-3-16 17:35
拆分文件,论坛里有很多案例可以参考,搜索并学习一下就是了

我现在手里有拆分的宏文件,但是只能对一个Excel文件中的一个表拆分,我需求的是同时拆分一个文件的2个表,为多个文件的2个表,搞不定
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 15:23 , Processed in 0.032880 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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