常用功能加载宏——拆分工作表
时间:2022-07-22
本文章向大家介绍常用功能加载宏——拆分工作表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
有合并工作表,自然也离不开拆分工作表,将一个总表,按照某一列的内容拆分为多个工作表,然后可以再结合前面的一个工作簿的工作表另存为工作簿功能,就可以生成多个工作簿进行分发了:
首先在customUI.xml中增加代码:
<button id="rbbtnSplitSht" label="拆分工作表" onAction="rbbtnSplitSht" imageMso="TableInsert" />
回调函数:
Sub rbbtnSplitSht(control As IRibbonControl)
Call MShtWk.SplitSht
End Sub
函数实现:
Sub SplitSht()
Dim rng As Range
On Error Resume Next
Set rng = Application.InputBox("请选择[标题行]、[拆分关键字列]所在的单元格", Default:=ActiveCell.Address, Type:=8)
On Error GoTo 0
If rng Is Nothing Then
Exit Sub
End If
Set rng = rng.Range("A1")
'字典记录每一个关键字对应的所有单元格
Dim dic As Object
Set dic = VBA.CreateObject("Scripting.Dictionary")
'获取表格的列的范围
Dim cols As Long
cols = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
'获取表格的最后所在的行
Dim rows As Long
'取消筛选
ActiveSheet.AutoFilterMode = False
rows = Cells(Cells.rows.Count, 1).End(xlUp).Row
If rows <= rng.Row Then MsgBox "没有数据": Exit Sub
'读取关键字所在列
Dim arr() As Variant
arr = Cells(1, rng.Column).Resize(rows, 1).Value
Dim i As Long
Dim strkey As String
For i = rng.Row + 1 To rows
strkey = VBA.CStr(arr(i, 1))
If dic.Exists(strkey) Then
'再次出现的关键字,合并
Set dic(strkey) = Excel.Union(Cells(i, 1).Resize(1, cols), dic(strkey))
Else
'第一次出现的关键字,记录标题及当前行单元格
Set dic(strkey) = Excel.Union(Cells(rng.Row, 1).Resize(1, cols), Cells(i, 1).Resize(1, cols))
End If
Next
Dim keys As Variant
keys = dic.keys()
Dim items As Variant
items = dic.items()
'新建表并复制单元格
For i = 0 To UBound(keys)
strkey = VBA.CStr(keys(i))
'注:这里没有去考虑sheet的名称是否合规,sheet名称是不能包含" / 等字符的"
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = strkey
items(i).Copy Range("A1")
Next
End Sub
- Python数据分析模块 | pandas做数据分析(三):统计相关函数
- 动态规划法(二)——弗洛伊德算法
- Python数据分析模块 | pandas做数据分析(二):常用预处理操作
- 贪心算法(一)——概述
- Python数据分析模块 | pandas做数据分析(一):基本数据对象
- 贪心算法(二)——一般背包问题
- 贪心算法(三)——最佳合并模式
- 贪心算法(四)——最小代价生成树
- 贪心算法(五)——迪杰斯特拉算法
- Tensorflow动态seq2seq使用总结
- 卷积神经网络中PET/CT图像的纹理特征提取
- 深入剖析Spring(四)——AOP
- Java并发编程的艺术(十二)——线程安全
- 用 LSTM 做时间序列预测的一个小例子
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Typecho如何添加“编辑”当前文章按钮
- Flutter入门第二讲:项目运行,Hello world
- Flutter入门第一讲:环境搭建(mac os为例)
- 第12天:NLP补充——HMM(隐马尔科夫模型)
- android View事件分发实测
- LeetCode51|寻找旋转排序数组中的最小值
- Yapi 可视化接口平台安装实践
- LeetCode50|搜索旋转排序数组II
- LeetCode49|搜索旋转排序数组
- 第13天:NLP补充——RNN算法
- Android自定义跑马灯效果(适合任意布局)
- Handler Looper.prepareMainLooper();源码分析
- Caused by: java.lang.IllegalStateException: System services not available to Activities before onCre
- Actuator与服务监控
- Typecho 文章置顶插件:Sticky