排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
字典双条件数据汇总
字典双条件数据汇总
VBA语言専攻
2022-08-07
17
【分享成果,随喜正能量】生活不简单,尽量简单过。时间就是一颗药,你掌握好了它便是解药,你肆意挥霍它便是毒药。不喧,不吵,静静地守着岁月;不怨,不悔,淡淡地对待自己。别紧张。深呼吸。坚持住。扛过去。
。
《VBA数组与字典方案》教程是我推出的第三套教程,目前已经是第一版修订了。这套教程定位于中级,
字典是VBA的精华
,我要求学员必学。七、一、三、九组合套教程掌握后,可以解决大多数工作中遇到的实际问题。
这套教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:字典双条件数据汇总
第三十九讲 利用数组与字典,实现双条件数据汇总
大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第39讲,利用数组与字典,实现双条件数据汇总的方法。大家或许在之前没有接触过字典,其实,字典在VBA中占据着很重要的地位。大家已经注意到了,字典的应用和数组是密不可分的。要想理解字典的应用,必须要掌握数组的用法,对于数组的理解要透彻后才能谈到字典的理解,字典本身其实非常的简单,就是要灵活的利用他的键和键值。
1 应用场景的具体分析
我们今日的内容是实现双条件的数据汇总,如下的数据,我们要根据A列和B列的值对C列数据实现汇总求和:
怎么能做到呢?我刚才讲过,字典的本身的定义非常简单,我们要深入的理解键和键值,巧妙的加以应用。
2 实现场景的代码及讲解
下面看我给出的代码:
Sub mynzsz_39() '39 利用数组与字典,实现双条件数据汇总的方法
Dim myarr
Sheets("39").Select
'将数据装入数组
myarr = Range("a2:c" & Range("c2").End(xlDown).row)
Set myDic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(myarr, 1)
'利用"丨"将数组的第一第二列合并,以利用查询
mykey = myarr(i, 1) & "丨" & myarr(i, 2)
'如果存在,合并值,如果不存在建立新的
If Not myDic.exists(mykey) Then
myDic(mykey) = myarr(i, 3)
Else
myDic(mykey) = myDic(mykey) + myarr(i, 3)
End If
Next
Range("g1:I1") = Array("型号", "类别", "数量")
'提取键数组,这个时候的元素是用"丨"隔开的,用replace分别替换掉左右的字符
myarr1 = Array(myDic.Keys)
Range("g2").Resize(myDic.Count, 2) = Application.Transpose(myarr1)
Range("g2").Resize(myDic.Count, 1).Replace "丨*", "", xlPart
Range("h2").Resize(myDic.Count, 1).Replace "*丨", "", xlPart
'提取键值数组
myarr2 = Array(myDic.items)
Range("I2").Resize(myDic.Count, 1) = Application.Transpose(myarr2)
End Sub
代码截图:
代码讲解:
1)上述代码实现了根据数据的A列和B列进行汇总求和的功能,实现类似的办法可以用以前我讲过的方法代码循环,还可以用数据库,大家可以试着比较一下。
2) '将数据装入数组
myarr = Range("a2:c" & Range("c2").End(xlDown).row)
上述代码实现将数据装入数组,以利用后续的操作。
3) mykey = myarr(i, 1) & "丨" & myarr(i, 2)
上述代码将数组的第一个元素和第二个元素合并,作为一个键,然后赋值
4) '如果存在,合并值,如果不存在建立新的
If Not myDic.exists(mykey) Then
myDic(mykey) = myarr(i, 3)
Else
myDic(mykey) = myDic(mykey) + myarr(i, 3)
End If
上面的代码是判断键存在与否的标准语句,大家要利用好,这也是一个标准的写法。
5) myarr1 = Array(myDic.Keys)
Range("g2").Resize(myDic.Count, 2) = Application.Transpose(myarr1)
将键组成的数组回填给单元格,注意这里回填的是两列,下面还有对这两列分别处理
6) Range("g2").Resize(myDic.Count, 1).Replace "丨*", "", xlPart
上述语句去右留左。
Range("h2").Resize(myDic.Count, 1).Replace "*丨", "", xlPart
上述语句去左留右。
上述代码也可以作为标准的语句进行写法的记忆。
下面看代码的运行:
今日内容回向:
1 如何实现双列的数据汇总?
2 在字典中双列的汇总最关键的步骤是什么?
我多年的VBA实践经验,全部浓缩在以下十套教程中,可以联络我V信VBA6337取得教程,成为我的学员:
【分享成果,随喜正能量】人生在世,有干不完的活,想不完的事,不去纠结,不去贪恋。物质极简,内心丰盈。
。
大数据
数组
文章转载自
VBA语言専攻
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨