ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] VBA DataAutomation数据处理类模块,一行代码搞定复杂数据

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-1 10:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
更新说明:修复已知bug
               优化一些方法效率
               新增一些功能(后续会讲解)
               新增接口回调,以解决2021版本
版本附件: DataAutomation1.2.rar (278.25 KB, 下载次数: 45)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-1 13:51 | 显示全部楼层
Public Function 拆分数量(ByVal index As Long) As DataAutomation
对识别一列数据(数据是数字)进行复制对应的行数
第1参数:列索引
演示:
image.png
Public Function 拆分数组(ByVal index As Long, [ByVal 竖向展开 As Boolean = True]) As DataAutomation
处理数组套数组形式的假二维数组,将假数组拆成真数组
第1参数:数组所在的列索引
第2参数:true拆分后数组竖向排列,false拆分后数组横向排列
演示1:竖向拆分
image.png
演示2:横向拆分
image.png
Public Function 分列(ByVal index As Long, ByVal 分隔符arr, [ByVal 竖向展开 As Boolean = False], [ByVal 模式 As VbCompareMethod = vbBinaryCompare]) As DataAutomation
类似Excel的分列
第1参数:要分列的字符串所在列索引
第2参数:分隔符(支持多个分隔符数组)
第3参数:true拆分后数组竖向排列,false拆分后数组横向排列
第4参数:大小写模式(参照VBA的Split函数)
演示1:竖向分列
image.png
演示2:横向分列
image.png
演示3:多分隔符分列
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-1 14:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Public Function 遍历Excel([ByVal 初始路径 As String = ""], [ByVal 筛选工作簿名 As String = "*"], [ByVal 筛选工作表名 As String = "*"], [ByVal 单元格区域 As String = ""], [ByVal 是否查找子目录 As Boolean = False], [ByVal 处理函数 As String = ""]) As DataAutomation
跨工作表、工作簿合并函数
第1参数:搜索文件夹的路径(*为空时只遍历以打开的工作簿*)
第2参数:筛选的工作簿名称,(支持模糊筛选,参考查找方法)
第3参数:筛选的工作表名称,(支持模糊筛选,参考查找方法)
第4参数:指定单元格区域(*为空时为工作表已使用区域*)
第5参数:搜索文件夹时是否对子目录搜索
第6参数:指定回调函数名(字符串类型)
                该回调函数会以da子实例形式传回每个工作表的单元格数据
                可以通过修改da子实例,进行数据的处理(比如处理标题不对应情况)
                如果为空时不会触发回调,以原数据形式合并
演示1:
image.png image.png image.png
如上三个季度表,进行合并
image.png
演示2:继续用演示1的三个表数据进行季度销量汇总
image.png
上传演示附件以便更好理解: 遍历sheet合并.rar (291.7 KB, 下载次数: 18)
觉得代码简短精炼的的点个赞

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-1 14:42 | 显示全部楼层
本帖最后由 905738810 于 2021-12-1 14:58 编辑

Public Function 格式化(ByVal 列标arr As Variant, ByVal 格式arr As Variant, Optional ByVal Farmat法 As Boolean = True) As DataAutomation
对整列数据进行VBA的Farmat函数操作
第1参数:要处理的列索引或列索引数组
第2参数:与第一参对应的格式字符串或字符串数组
               (如果第1参数是列索引数组,则第2参数要与之数量对应的字符串数组)
第3参数:true则用VBA的Farmat函数处理,false则用Excel的Text函数处理
演示:
image.png
Public Function 格式转换(ByVal indexarr As Variant, ByVal 格式 As 转格式, Optional ByVal 舍入位数 As Double = 0) As DataAutomation
对整列数据进行数据类型转换
第1参数:要处理的列索引或列索引数组
第2参数:转换的格式,枚举值
Public Enum 转格式
    gs转日期 = 1
    gs转文本 = 2
    gs转数值val = 3
    gs转数值CDbl = 4
    gs四舍五入 = 5
    gs向下舍入 = 6
    gs向上舍入 = 7
    gs转单元格文本 = 8'会强制在数据内容前拼接一个 ' 符号
End Enum
第3参数:处理小数是填写舍入位数
演示:
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-1 14:57 | 显示全部楼层
Public Function 对比DA包含情况(da As DataAutomation, ByVal ME列arr, ByVal DA列arr) As DataAutomation
两个da数据互相查找,在两个da数据后都增加了一列反应查找情况,列内容为1则存在包含
第1参数:另一个da实例
第2参数:调用该方法的da数据列索引,或索引数组(根据索引拼接成对比的key)
第3参数:另一个da实例的列索引,或索引数组(根据索引拼接成对比的key)
此方法没有使用字典,单纯的使用了循环,效率并不高
演示:
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-1 15:08 | 显示全部楼层
Public Function 排列组合(ByVal index As Long, ByVal 取最小个数 As Long, ByVal 取最大个数 As Long, [ByVal 分隔符 As String = ","]) As DataAutomation
对一列数组进行排列组合,该方法会替换到原da数据,替换成排列组合数据
第1参数:列索引
第2参数:M里抽取N个,抽取的最小个数N
第3参数:M里抽取N个,抽取的最大个数N
第4参数:组合的分隔符
注意:穷举的效率是很低的而且算法没有优化,不要进行大量数据的穷举,否咋会假死
演示:
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-1 15:30 | 显示全部楼层
Public Function 求和凑数(ByVal index As Long, ByVal 最小值, ByVal 最大值, [ByVal 最大条数 = 0], [ByVal 随机次数 = 0]) As DataAutomation
对一列数据进行凑数,将凑数结果展示在新增一列,对满足凑数的标上序号
第1参数:凑数的列索引
第2参数:求和的最小值(包含最小值)
第3参数:求和的最大值(包含最大值)
第3参数:累加元素的个数最大数量[为0则无限制]
第3参数:随机的次数(按数据量的情况而定)[为0按计算机默认数量]
该采用随机凑数方法,结果不一定是最佳,凑数没结果可以也并不是没有结果,可以增加随机次数
随机次数较大会延长计算时间,造成假死
演示:
对数据凑出150~200的值
会增加一个凑数序号,相同的序号为一组结果
image.png
对序号进行排序后可以更明显看出结果,相同序号相加会在150~200
image.png


TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-2 08:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Public Function 查找替换区域(ByVal 行 As Long, ByVal 列 As Long, ByVal 高 As Long, ByVal 宽 As Long, _
        ByVal 查找内容arr As Variant, ByVal 替换内容arr As Variant) As DataAutomation
对一个区域进行查找替换
第1参数:区域左上角在da数据的行索引
第2参数:区域左上角在da数据的列索引
第3参数:区域高度
第4参数:区域宽度
第5参数:查找的内容,传入数组可以同时查找多个内容(支持模糊搜索,参照查找方法)
第6参数:替换的内容
            当第5参数查找内容传入数组时,替换内容不是数组,则将全部找到的内容替换为替换内容
            当第5参数查找内容传入数组时,替换内容是数组且数量与查找内容数量一致,则将找到的内容按顺序替换为替换内容
演示1:将数据的8和9全部换成"A"

image.png
演示2:将数据的8换成"A",9换成"B"
image.png
演示3:将大于5的替换成0
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-2 08:47 | 显示全部楼层
前面所有的主方法讲完了,还剩辅助方法
所谓辅助方法是不对da数据进行处理的独立方法,主要用来配合主方法一起使用
Public Function 构造序列(ByVal L As Long, ByVal r As Long) As Variant()
在传参时很多方法都用到了行或列索引数组,如果遇到了50~100列序号,
那么手敲就很麻烦了,单独写VBA代码也麻烦,所以我写了这个方法
第1参数:序号最小值
第2参数:序号最大值
演示:
image.png
Public Function 新建数组(ByVal 行 As Long, Optional ByVal 列 As Long = 0, Optional 填充值 As Variant = "") As Variant()

创建一个数组就像dim arr(行,列),并且可以给数组一个初始值,这里不演示了
Public Function 数组拼一维(ParamArray arr()) As Variant()

处理数组套数组,将所有元素拼接成一位数组,主要配合构造序号方法,可以更灵活
演示:构造1,2,3,4,10,10,10,11,12,13,14序列数组
image.png
Public Function 转置(ByVal arr1)
对数组进行转置操作,比如原数组是一维数组(一行),在传入da数据时想变成二维数组(转一列),这是就可以套此方法
演示:在不使用转置时是这样的(拼接成一行了)
image.png
使用转置后(拼接成两列了)
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-2 09:01 | 显示全部楼层
Public Function 根据标题返回序号(ByVal 数据源标题arr, ByVal 自定义顺序arr)da数据都是根据行列索引操作数据的,如果想根据标题位置来操作,可以使用此函数返回对应的序列索引
第1参数:数据源的标题数组
第2参数:要查找的标题数组(支持模糊查找)
演示:表1变表2
image.png

两个正则辅助函数:
Public Function 正则取值(ByVal 内容, ByVal 表达式, [ByVal 内容index As Long = 1], [ByVal 组index As Long = 0], [ByVal 忽略大小写 As Boolean = True], [ByVal 匹配全部 As Boolean = True])
Public Function 正则替换(ByVal 内容, ByVal 表达式, ByVal 替换内容, [ByVal 忽略大小写 As Boolean = True], [ByVal 匹配全部 As Boolean = True])
这两个正则函数不进行演示了,该方法是正则取值置换列,正则替换列演变出来的,处理单个文本用的,可以去参考正则取值置换列,正则替换列
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-26 08:06 , Processed in 0.050590 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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