
VBA字典数组转置维度变化
本地窗口中如下图所示。
【代码解析】 第3行代码声明创建一个字典对象。 第4~6行代码为字典对象赋值,共有5个元素。 第8行代码将自动对象的items集合赋值给arr1,有立即窗口中可以看到arr1是一维数组,其下标为0至4,对应立即窗口的输出如下。
发布日期:2021-05-06 08:33:48
浏览次数:23
分类:精选文章
本文共 1681 字,大约阅读时间需要 5 分钟。
字典是VBA中经常使用的对象,有时需要将字典对象中保存数据转为数组,然后做进一步处理,在使用过程中经常会遇到数组下标越界之类的问题,下面就讲讲字典到数组的转换。
示例代码如下:Sub Demo() Dim arr1, arr2, arr3 Set objDic = CreateObject("Scripting.Dictionary") For i = 1 To 5 objDic(i) = i Next i Debug.Print "> items直接赋值给数组:" arr1 = objDic.items Call GetArrBound(arr1) Debug.Print "> 数组第一次转置:" arr2 = Application.Transpose(arr1) Call GetArrBound(arr2) Debug.Print "> 数组第二次转置:" arr3 = Application.Transpose(arr2) Call GetArrBound(arr3) Set objDic = NothingEnd SubSub GetArrBound(arr) Dim intArrDim As Integer, n intArrDim = fnGetArrayDimension(arr) Debug.Print ">>数组维度:" & intArrDim For n = 1 To intArrDim Debug.Print ">>>第" & n & "维下界:" & LBound(arr, n) & ", 上界:" & UBound(arr, n) Next Debug.Print Application.Rept("=", 20)End SubFunction fnGetArrayDimension(arr) As Integer Dim tmp, i On Error Resume Next For i = 1 To 60 Err.Clear tmp = UBound(arr, i) If Err.Number = 9 Then fnGetArrayDimension = i - 1 Exit Function End If Next iEnd Function
运行Demo
过程立即窗口中的输出如下:


> items直接赋值给数组:>>数组维度:1>>>第1维下界:0, 上界:4
第11行代码将数组进行一次转置,此时生成的数组arr2变为二维数组,对应立即窗口的输出如下。
> 数组第一次转置:>>数组维度:2>>>第1维下界:1, 上界:5>>>第2维下界:1, 上界:1
第14行代码将数组再进行一次转置,此时生成的数组arr3为一维数组,对应立即窗口的输出如下。虽然经过两次转置,数组变回一维数组,但是数组的下届和上界都发生了变化,在代码中引用数组时需要注意下标的范围。
> 数组第二次转置:>>数组维度:1>>>第1维下界:1, 上界:5
第18~26行代码为GetArrBound
过程用于获取并输出数组每个维度的上界和下届。
fnGetArrayDimension
过程用于获取数组知维度数量,代码详细讲解参见《[如何获取数组的维数](https://blog.csdn.net/taller_2000/article/details/84868857)》
。 发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月11日 22时38分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
递归生成重复元素的全排列
2019-03-04
手机号码(数位dp-dfs)
2019-03-04
算法训练 Anagrams问题
2019-03-04
Linux-文件目录类常用指令3
2019-03-04
搜索查找类指令
2019-03-04
数字三角形的无返回值的深度优先搜索解法
2019-03-04
完全背包问题的简化思路
2019-03-04
Jquery添加元素
2019-03-04
Jquery使用需要下载的文件
2019-03-04
Spring中如何传递参数的问题
2019-03-04
Ajax中get方式url传递中文参数乱码的解决
2019-03-04
BST中某一层的所有节点(宽度优先搜索)
2019-03-04
广度优先搜索
2019-03-04
对于递归的理解
2019-03-04
二分查找(递归)
2019-03-04
猜字母
2019-03-04
奇怪的分式(枚举 + 判断)
2019-03-04
Linux网络环境配置(设置ip地址)
2019-03-04
Idea使用Spring Initializr来快速创建springboot项目
2019-03-04