排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
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字典之按指定规则排序
VBA字典之按指定规则排序
VBA语言専攻
2022-12-16
215
【分享成果,随喜正能量】境由心造,物随心转。现在的一切不管好坏,终将会过去,与其满心哀怨、焦虑,不如乐观一些,坦然的面对一切,让心中洒满阳光,驱散一切负面情绪造成的精神内耗,请相信,一切都会好起来的。
。
《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,
字典是VBA的精华
,我要求学员必学。7.1.3.9教程掌握后,可以解决大多数工作中遇到的实际问题。
这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA字典之按指定规则排序
第四十七讲 利用数组和字典,实现
按指定规则排序
大家好,今日我们继续讲解数组与字典解决方案,今日讲解第47讲:利用字典和数组,实现按指定规则的排序。随着字典讲解的深入,我们发现字典真的很神奇,在VBA代码中,给人以十分清爽的感觉,在这套数组与字典解决方案中,我会尽可能的把经常用到的实例多多讲解给大家,让大家对于字典的理解更加深入。虽然这块内容利用其它方案都可以实现,但是字典确实能大大简化我们的代码.让我们对于VBA的理解更深入.
1 应用场景的具体分析
今日实例是实现按指定规则的排序。为什么会有这个课题呢?职场中,我们经常会用到数据分析,往往数据来源不一致,同样项目,由于来源不同,往往排序的方式不同,而且有时候要求提交数据的排序并不是EXCEL自带功能可以解决的,这个时候怎么办?我们依然可以用字典来帮助解决,我们看下面的数据:
大家注意到,在A,B列中,给出了排序的规则,在D,E,F列中是提供的报表数据,但这个数据报表的排序不符合A,B列的排序规则,我们要实现的是把报表数据按照固定的规则来排序,如何做到呢?
2 实现按给定规则排序的代码及代码讲解
下面看我给出的代码:
Sub mynzsz_47() '第47讲 利用数组和字典,实现按指定规则的排序
Sheets("47").Select
Dim mybrr()
'建立字典
Set myDic = CreateObject("Scripting.Dictionary")
'把数据装入数组
myarr = Range("a2:f" & [a65536].End(xlUp).Row)
'动态数组的再分配
ReDim mybrr(1 To UBound(myarr), 1 To 4)
'字典的赋值,也是排序规则的建立
For i = 1 To UBound(myarr)
myDic(CStr(myarr(i, 1))) = i
Next i
'给定数据的排序,其实是把给定的数据,按照字典建立的规则放到另外一个数组中
For i = 2 To Cells(65536, 4).End(xlUp).Row
If myDic(CStr(myarr(i - 1, 4))) <> "" Then
mybrr(myDic(CStr(myarr(i - 1, 4))), 1) = myarr(i - 1, 4)
mybrr(myDic(CStr(myarr(i - 1, 4))), 2) = myarr(i - 1, 5)
mybrr(myDic(CStr(myarr(i - 1, 4))), 3) = myarr(i - 1, 6)
End If
Next i
'数据的回填
[d2].Resize(UBound(mybrr), 3) = mybrr
MsgBox "ok!"
End Sub
代码的截图:
代码讲解:
1) 上述代码实现了数据按指定规则排序,只要给定规则,就可以实现数据的自定义排序。
2) '把数据装入数组
myarr = Range("a2:f" & [a65536].End(xlUp).Row)
上述代码将数据放到数组中,在实际应用中,也可以将规则数据和报表数据分别放在不同的数组中。
3) '动态数组的再分配
ReDim mybrr(1 To UBound(myarr), 1 To 4)
这个动态数组是用来装排序完成的数据的。
4) '字典的赋值,也是排序规则的建立
For i = 1 To UBound(myarr)
myDic(CStr(myarr(i, 1))) = i
Next i
大家要注意这几行代码即给字典赋值同时又用键值定义了排序的规则,大家可以理解一下。
5 )'给定数据的排序,其实是把给定的数据,按照字典建立的规则放到另外一个数组中
For i = 2 To Cells(65536, 4).End(xlUp).Row
If myDic(CStr(myarr(i - 1, 4))) <> "" Then
mybrr(myDic(CStr(myarr(i - 1, 4))), 1) = myarr(i - 1, 4)
mybrr(myDic(CStr(myarr(i - 1, 4))), 2) = myarr(i - 1, 5)
mybrr(myDic(CStr(myarr(i - 1, 4))), 3) = myarr(i - 1, 6)
End If
Next i
在上述代码中,首先在字典中查找报表数据在字典中是否存在,如果存在,那么就存放到存放排序结果的数组中,但是放在结果数组中的时候,存放顺序是键值给出的顺序。
6 )'数据的回填
[d2].Resize(UBound(mybrr), 3) = mybrr
将排序的结果回填到数据区域.
下面看代码的运行结果:
今日内容回向:
1 如何实现报表数据按指定规则的排序?
2 myDic(CStr(myarr(i, 1))) = I 的意义是什么?
我多年的VBA实践经验,全部浓缩在以下十套教程中,可以联络我V信VBA6337取得教程,成为我的学员:
【分享成果,随喜正能量】快乐是一种心理状态。内心湛然,则无往而不乐。吃饭睡觉,稀松平常之事,但是其中大有道理。
。
vba
vba字典
vba数组
字典排序
文章转载自
VBA语言専攻
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨