ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-25 13:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Public Function 合并组([ByVal 层 As Long = 0]) As DataAutomation
将组的单元进行上下拼接,写入到da数据中,替换掉原数据
第1参数:要合并的第N层
              当传递0时按叶子节点单元合并(默认值)
              当传递任意负数时合并所有层
              详细参考遍历组方法
演示:隔两行插入一行
未命名1637736854.png
Public Function 清空组() As DataAutomation
将组内容全部清除,分组操作只会像组中添加单元,不会替换组里的内容
在需要重新分组时需要执行清空组
Public Property 组 As Object
这个属性可以返回组的字典
Public Property 父对象 As DataAutomation
通过da实例衍生出的子实例都对保留上一实例对象,保存在父对象属性中
方法大概有:da所有分组方法衍生的实例
                   da.xin
                   da.取整行
                   da.取整列
                   da.行列拼接
                  da.裁剪区域
                  da.字典取行
                  da.字典取行列
Public Property 名字 As String
可以对da实例起名字,当做标识

TA的精华主题

TA的得分主题

发表于 2021-11-26 00:26 来自手机 | 显示全部楼层
本帖最后由 chenwenyong 于 2021-11-26 11:21 编辑

看来我以前的很多零碎的函数可以替换掉了!类模块是不是不能直接返回数组,必须得用一个数组变量附值!我自己写的数组合并拆分转置类模块,直接当数组提示错误,必须得通过中间变量才能用!
我把你的类模块下载了,还是有点迷糊。如果能针对每个功能做个小例子就好了。这样就直观了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-26 11:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
       对于前篇讲的合并组方法有一个缺陷,就是他只会按拆分顺序来合并,
而有时候想对组的单元有选择的合并,或者自己定义的顺序合并,这是就
需要重新定义组的顺序,可以用下面讲的方法:组排序
Public Function 组排序([ByVal key As String = "index"]) As DataAutomation
按自定义规则来重新组合单元,形成一个新的组,该方法会替换掉原先组
第1参数:与属性关联的key
原理:该方法是将组全部遍历,抽取组中所有人为设置好属性key的da.子实例,只要
有key属性的da子实例就会添加到新的组中,然后读取每个key属性的属性值作为排序
字段进行排序
使用前需要做好四步骤才可使用:
          1.分组-2.遍历组-3.遍历组回调函数中写入属性(key , 排序字段)-4.组排序(key)
演示:按季度排序,并过对组的单元滤出标题
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-26 12:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
da类的错误处理
如果你能坚持看到这的朋友会发现da类的编程方式为链式编程,编写很方便,如果有足够宽的显示甚至可以全部写到1行
同时他暴露出了一个严重的缺点,就是每个方法的计算都是参照上一个方法处理的数据,一旦上个方法处理错误后面方法
也会跟着对错误数据继续处理,会导致:1.计算的数据有误,2.对错误数据处理做了很多无用功浪费计算时间
da类提供了两个方法一个属性来控制上述问题
Public Function 错误停止运行() As DataAutomation
当前面方法出错时,后续方法全部跳过运行
Public Function 错误继续运行() As DataAutomation
当前面方法出错时,后续方法集训运行(默认)
Public Property 错误信息 As String
记录第一个报错的方法
演示1:运行到添加数据方法会报错,后续写入单元格不会被执行
image.png
错误停止运行和错误继续运行方法可以在任意位置添加任意数量
可以利用该方法控制某一串方法不运行
演示2:
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-26 12:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
开发者模式与用户模式
有这样需求:在开发阶段,我们希望能够发现代码中的错误,VBA可以给提供给我们报错提示
                   在用户使用阶段,不能将VBA的报错提示框展示给用户
此模式在da类中不是用代码修改的,是在da类模块中
在da类模块顶部有这样的代码,如图:
image.png
大概在40行左右
这是一个条件编译代码,不知道的不需要知道,只要知道把false改成true就是用户模式就够了
演示:#Const 用户模式 = False ,弹出错误提示
image.png
      #Const 用户模式 = True ,不弹出提示
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-27 15:15 | 显示全部楼层
今天不讲新方法,主讲回调函数,因为回调函数是da类的核心思想之一
为了不占地方,我开了新帖VBA回调函数作用讲解

TA的精华主题

TA的得分主题

发表于 2021-11-27 20:48 | 显示全部楼层
905738810 发表于 2021-11-27 15:15
今天不讲新方法,主讲回调函数,因为回调函数是da类的核心思想之一
为了不占地方,我开了新帖VBA回调函数 ...

楼主的程序是易语言吗?麻烦编个PowerPoint的动画,给我们学习下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-27 20:51 来自手机 | 显示全部楼层
dongdonggege 发表于 2021-11-27 20:48
楼主的程序是易语言吗?麻烦编个PowerPoint的动画,给我们学习下。

很明显是vba不是易语言

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-28 13:44 | 显示全部楼层
很多场景对字符串操作还是蛮多的,所以我写了四个正则函数,可以对整行整列进行提取或替换操作
Public Function 正则取值置换列(ByVal indexarr, ByVal 表达式, [ByVal 内容index As Long = 1], [ByVal 组index As Long = 0], [ByVal 忽略大小写 As Boolean = True], [ByVal 匹配全部 As Boolean = True]) As DataAutomation
对整列进行正则提取文本
第1参数:实行正则匹配的列索引
第2参数:正则表达式
第3参数:如果正则匹配多个结果,指定提取的第几个结果
第4参数:如果正则有分组()内容,指定提取第几个分组,如果参数设置为0,则不提取组
第5参数:正则匹配原则是否忽略大小写
第6参数:正则匹配原则是全部匹配
演示1:只提取匹配结果
image.png
演示2:匹配组的结果
image.png
Public Function 正则取值置换行(ByVal indexarr, ByVal 表达式, [ByVal 内容index As Long = 1], [ByVal 组index As Long = 0], [ByVal 忽略大小写 As Boolean = True], [ByVal 匹配全部 As Boolean = True]) As DataAutomation

参考正则取值置换列

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-28 13:55 | 显示全部楼层

Public Function 正则替换列(ByVal indexarr, ByVal 表达式, ByVal 替换内容, [ByVal 忽略大小写 As Boolean = True], [ByVal 匹配全部 As Boolean = True]) As DataAutomation
对整列文本进行正则替换操作
第1参数:实行正则匹配的列索引
第2参数:正则表达式
第3参数:要对匹配结果进行替换的内容
第4参数:正则匹配原则是否忽略大小写
第5参数:正则匹配原则是全部匹配(这里很重要,如果只替换第一个内容可以设置false)
演示:正则我就不解释了
image.png
Public Function 正则替换行(ByVal indexarr, ByVal 表达式, ByVal 替换内容, [ByVal 忽略大小写 As Boolean = True], [ByVal 匹配全部 As Boolean = True]) As DataAutomation
参考正则替换列
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-27 19:34 , Processed in 0.038002 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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