Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Excel VBA解读(157): 数据结构—ArrayList(续)

Excel VBA解读(157): 数据结构—ArrayList(续)

作者头像
fanjy
发布于 2019-08-16 01:52:22
发布于 2019-08-16 01:52:22
3K0
举报
文章被收录于专栏:完美Excel完美Excel

学习Excel技术,关注微信公众号:

excelperfect

上篇文章,我们初步认识了ArrayList,下面进一步了解其排序、复制、数组转换等功能。

排序

Sort方法对ArrayList按升序排列:

Sub testSort()

Dim alCol As Object

Set alCol = CreateObject("System.Collections.ArrayList")

alCol.Add "3"

alCol.Add "1"

alCol.Add "5"

alCol.Add "4"

alCol.Add "2"

'排序

alCol.Sort

Debug.Print "升序排列"

DebugPrint alCol

End Sub

Sub DebugPrint(alColl As Object)

Dim i As Long

For i = 0 To alColl.Count - 1

Debug.Print alColl(i)

Next i

End Sub

运行结果如下图6所示。

图6

在Sort方法之后,再使用Reverse方法,将按照降序排列:

Sub testSort()

Dim alCol As Object

Set alCol = CreateObject("System.Collections.ArrayList")

alCol.Add "3"

alCol.Add "1"

alCol.Add "5"

alCol.Add "4"

alCol.Add "2"

'排序

alCol.Sort

alCol.Reverse

Debug.Print "降序排列"

DebugPrint alCol

End Sub

Sub DebugPrint(alColl As Object)

Dim i As Long

For i = 0 To alColl.Count - 1

Debug.Print alColl(i)

Next i

End Sub

运行结果如下图7所示。

图7

“克隆”ArrayList

使用Clone方法可以创建ArrayList的全新副本:

Sub testClone()

Dim alColl1 As Object

Set alColl1 = CreateObject("System.Collections.ArrayList")

'添加元素

alColl1.Add "完美Excel"

alColl1.Add "excelperfect"

alColl1.Add "Excel"

'创建副本

Dim alColl2 As Object

Set alColl2 = alColl1.Clone

'删除

alColl1.Clear

Debug.Print "alColl1包含元素:"

DebugPrint alColl1

Debug.Print "alColl2包含元素:"

DebugPrint alColl2

End Sub

Sub DebugPrint(alColl As Object)

Dim i As Long

For i = 0 To alColl.Count - 1

Debug.Print alColl(i)

Next i

End Sub

运行结果如下图8所示。

图8

可以看出,使用Clone方法将alColl1赋给alColl2后,清空alColl1中的元素,对alColl2没有影响。

注意,如果使用语句:

set alColl2 = alColl1

将指向同一个ArrayList。

注意,代码中使用Clear方法删除ArrayList中的所有元素项。

复制ArrayList到数组

ToArray方法可以将ArrayList复制到数组:

Sub testClone()

Dim alColl As Object

Set alColl = CreateObject("System.Collections.ArrayList")

'添加元素

alColl.Add "完美Excel"

alColl.Add "excelperfect"

alColl.Add "Excel"

'复制

Dim arr As Variant

arr = alColl.ToArray

'打印

Debug.Print "打印数组元素:"

DebugPrintArray arr

End Sub

Sub DebugPrintArray(arr As Variant)

Dim i As Long

For i = LBound(arr) To UBound(arr)

Debug.Print arr(i)

Next i

End Sub

运行结果如下图9所示。

图9

将ArrayList复制到二维数组

可以创建一个自定义函数,将ArrayList复制到二维数组。这样,就可以直接将值写入到工作表单元格区域中。

Sub testCopy2D()

Dim alColl As Object

Set alColl = CreateObject("System.Collections.ArrayList")

'添加元素

alColl.Add "完美Excel"

alColl.Add "excelperfect"

alColl.Add "Excel"

'复制

Dim arr As Variant

arr = CopyToArray(alColl)

'写入工作表

Worksheets("Sheet1").Range("A1:A3") = arr

End Sub

Function CopyToArray(alColl As Object) As Variant

Dim arr As Variant

ReDim arr(1 To alColl.Count, 1 To 1)

Dim i As Long

For i = 0 To alColl.Count - 1

arr(i + 1, 1) = alColl(i)

Next i

CopyToArray = arr

End Function

运行代码后,将在工作表Sheet1中输入ArrayList的内容。

将一维数组元素复制到ArrayList

可以编写自定义函数,将一维数组元素复制到ArrayList:

Sub GetItemFromArray1D()

Dim arr(1 To 3) As Variant

arr(1) = "完美Excel"

arr(2) = "excelperfect"

arr(3) = "Excel"

Dim alColl As Object

Set alColl = Array1DToArrayList(arr)

DebugPrint alColl

End Sub

Function Array1DToArrayList(arr As Variant) As Object

'检查是否是一维数组

On Error Resume Next

Dim n As Long

n = -1

n = UBound(arr, 2)

On Error GoTo 0

If n <> -1 Then

Err.Raise vbObjectError + 513,"Array1DToArrayList", _

"数组只能是一维数组"

End If

'创建ArrayList

Dim alColl As Object

Set alColl = CreateObject("System.Collections.ArrayList")

'添加元素

Dim i As Long

For i = LBound(arr, 1) To UBound(arr, 1)

alColl.Add arr(i)

Next i

'返回值

Set Array1DToArrayList = alColl

End Function

Sub DebugPrint(alColl As Object)

Dim i As Long

For i = 0 To alColl.Count - 1

Debug.Print alColl(i)

Next i

End Sub

运行结果如下图10所示。

图10

将二维数组元素复制到ArrayList

可以编写自定义函数,将二维数组元素复制到ArrayList:

Sub GetItemFromArray2D()

Dim alColl As Object

Set alColl =Array2DToArrayList(Worksheets("Sheet1").Range("A1:A3").Value)

DebugPrint alColl

End Sub

Function Array2DToArrayList(arr As Variant) As Object

'检查是否是二维数组

If UBound(arr, 2) > 1 Then

Err.Raise vbObjectError + 513,"Array2DToArrayList", _

"单元格区域/数组只能是一列"

End If

'创建ArrayList

Dim alColl As Object

Set alColl =CreateObject("System.Collections.ArrayList")

'添加元素

Dim i As Long

For i = LBound(arr, 1) To UBound(arr, 1)

alColl.Add arr(i, 1)

Next i

'返回值

Set Array2DToArrayList = alColl

End Function

Sub DebugPrint(alColl As Object)

Dim i As Long

For i = 0 To alColl.Count - 1

Debug.Print alColl(i)

Next i

End Sub

运行结果如下图11所示。

图11

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Excel VBA解读(156): 数据结构—ArrayList
在VBA中,ArrayList与内置的Collection对象类似,但提供了更丰富的功能,包括排序、数组转换、删除所有元素项目等。然而,ArrayList不是VBA内置的对象,需要我们添加对外部库的引用,才能够使用它。
fanjy
2019/08/13
6.9K0
Excel VBA解读(156): 数据结构—ArrayList
Excel VBA解读(160): 数据结构—字典对象的基本操作(续)
Set dict = CreateObject("Scripting.Dictionary")
fanjy
2019/08/29
3.3K0
Excel VBA解读(160): 数据结构—字典对象的基本操作(续)
ArrayList等相关代码示例
标签:VBA,ArrayList,Queue,Sortedlist,Stack,Random
fanjy
2023/11/24
2950
ArrayList等相关代码示例
基础扩展 | 26. 使用VBA实现二叉排序树
经过前面一系列关于二叉树的知识的学习,我们对这种数据结构已经有了一定的基础。下面,我们来看如何使用VBA实现二叉排序树。
fanjy
2019/08/16
1.4K0
基础扩展 | 26. 使用VBA实现二叉排序树
Excel VBA解读(161): 数据结构—字典对象操作示例
在前面的讲解中,我们添加到字典中的元素都是一个键对应着一个值,如果我们想要在字典对应的每个键中存储多个值,该怎样做呢?
fanjy
2019/09/03
2.2K0
Excel VBA解读(161): 数据结构—字典对象操作示例
Excel VBA解读(151): 数据结构——增强集合功能的代码
集合是一种很有用的数据结构,能够让我们更方便地实现一些程序功能。本文介绍几段代码,能够进一步增强集合的功能。
fanjy
2019/07/19
1K0
Excel VBA解读(154): 数据结构——数组常用操作示例代码
For j = LBound(arr, 2) To UBound(arr, 2)
fanjy
2019/07/29
2K0
Excel VBA解读(149): 数据结构—集合的基本操作
除了Excel对象模型中已经有的集合对象外,我们还可以创建自已的集合。有两种方式。
fanjy
2019/07/19
4.4K0
VBA字典(Dictionary)极简教程
Excel中的字典(Dictionary)对大多数人来说都是个谜,即使是有些很熟悉VBA的人,可能对其都还不了解。其实,字典是一个很好的工具,运行快速,可以执行一些很好的计算。
fanjy
2022/11/16
3.5K0
VBA字典(Dictionary)极简教程
基础扩展 | 22. 遍历二叉树—前序遍历算法的VBA代码解析
在上一篇文章《基础扩展| 21. 遍历二叉树》中,我们给出了遍历二叉树的三种方式:前序遍历、中序遍历、后序遍历,以及对应的规则和示意图。下面,我们给出实现这三种遍历算法的VBA代码并详细解析代码的运行过程。
fanjy
2019/08/06
7610
VBA字典(详解,示例)「建议收藏」
如果对上面水果种类进行计数:countifs,只需要将分类汇总的值改为数值1即可,每出现一次‘+1’
全栈程序员站长
2022/07/22
7K1
VBA字典(详解,示例)「建议收藏」
Excel VBA解读(150): 数据结构—集合的基本使用
运用集合,我们可以更高效地完成一些任务。例如,集合的特点就是可以把很多值存储在一个集合中,而不需要使用多个变量来存储这些值。
fanjy
2019/07/19
3.6K0
基础扩展 | 24. 遍历二叉树—后序遍历算法的VBA代码解析
前面的两篇文章《基础扩展| 22. 遍历二叉树—前序遍历算法的VBA代码解析》和《基础扩展| 23. 遍历二叉树—中序遍历算法的VBA代码解析》中,我们分别给出了前序遍历和中序遍历二叉树算法的VBA代码,并详细解析了代码的运行过程。
fanjy
2019/08/08
8810
基础扩展 | 24. 遍历二叉树—后序遍历算法的VBA代码解析
基础扩展 | 13. 使用VBA实现栈结构
栈是一种常见的基础数据结构,用来实现后进先出的目的。比如,在桌子上摞了一堆书,最后放的书一定在最上面,最先拿走的也是最上面的书。
fanjy
2019/07/19
1.4K0
Excel VBA解读(158): 数据结构—认识字典对象
在前面的一系列文章中,我们详细讲解了集合、数组和ArrayList,我们通常可以使用它们来存储成组的数据,方便后面的操作。接下来的几篇文章,我们将详细讲解字典。
fanjy
2019/08/20
2.3K0
Excel VBA解读(158): 数据结构—认识字典对象
Excel VBA解读(159): 数据结构—字典对象的基本操作
Add方法有两个参数。参数Key指定字典元素项的键值,参数Item指定字典元素项的值。如下面的代码:
fanjy
2019/08/27
2.8K0
Excel VBA解读(159): 数据结构—字典对象的基本操作
Excel VBA解读(153): 数据结构——基本的数组操作
创建了一个可以容纳6个Long型数据的数组,第一个元素的索引值为0,最后一个元素的索引值为5,如下图1所示。
fanjy
2019/07/25
2.6K0
VBA专题06-5:利用Excel中的数据自动化构建Word文档—Excel与Word整合示例2
使用书签,可以方便地替换书签处的文本。例如,在下图9中的模板Bookmarks.dotx相应的文本位置定义了书签。
fanjy
2019/10/09
2K0
VBA专题06-5:利用Excel中的数据自动化构建Word文档—Excel与Word整合示例2
VBA用字典批量查找社保数据
【问题】我们知道社保导出的数据是很多合并的单元格,如果要查找一个数据都要找很久,如果数量多了更多费时,基于以上问题,特用VBA设计一个批量查找的程序。
哆哆Excel
2022/10/25
8020
VBA用字典批量查找社保数据
用VBA实现Excel函数01:VLOOKUP
很多学习VBA的应该都是在使用了一段时间的Excel之后,想弥补一些Excel本身的不足、或者是实现一些自动化操作。
xyj
2020/07/28
8.9K0
用VBA实现Excel函数01:VLOOKUP
推荐阅读
相关推荐
Excel VBA解读(156): 数据结构—ArrayList
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档