动态数组的利用

动态数组的利用大家可以非常容易的掌握相关的知识 这套教程面向初学人员 共三册 十七章 都是我们在利用 EXCEL 工作过程中需要掌握的知识点 希望大家能掌握利用

大家好,欢迎来到IT知识分享网。

今日的内容是“VBA之EXCEL应用”的第十二章“Excel VBA中数组的应用”。这讲是第2节“动态数组的利用”。这套教程从简单的录制宏开始讲解,一直到窗体的搭建,内容丰富,案例众多。大家可以非常容易的掌握相关的知识,这套教程面向初学人员,共三册,十七章,都是我们在利用EXCEL工作过程中需要掌握的知识点,希望大家能掌握利用。

第二节 动态数组的利用

大家好,在上一节中,我们讲解了数组的基本概念和用法,这讲中,我们讲解动态数组,通过声明动态数据,可以在运行代码时调整数组的大小。

1 动态数组的声明方法

在声明数组时候,将括号内留空,就可以声明动态数组了。如果数组的大小增加,可以使用ReDim关键字,Excel VBA可以自动改变数组的大小。

在数组范围内的过程中,使用 ReDim 语句可更改维度数、定义元素数,以及定义每个维度的上限和下限。可以根据需要使用 ReDim 语句更改动态数组。每次这么做时,数组中的现有值都会丢失。但可以使用 ReDim Preserve 可在保留数组中现有值的情况下扩展数组。

示例:

Dim T() As Integer

上述语句声明了一个叫做T的动态数组。但是,尽管该语句声明了数组,但是,没有分配任何内存给该数组。当我们使用Redim T(5)的时候,才开始为该数组分配了内存。

2 动态数组的应用实例

我们来看一下动态数组的应用实例,仍是上节用到的截图:

动态数组的利用

我们要把上述人名录入到一个一维数组中以备在程序中使用,但是,上述的人名是不固定的,现在是7个人,可能随时会有增加和减少,这个时候,该如何书写代码呢?

我们看修正后的代码:

Sub mynzB() ‘动态数组的应用1

Dim T() As String

If Range(“A1”) <> “” And Range(“A2”) <> “” Then

Size = Range(“A1”).End(xlDown).Row

Else

MsgBox “工作表中没有人名的记入!”: End

End If

ReDim T(Size – 1)

For i = 1 To Size – 1

T(i) = Cells(i + 1, 1)

Next

MsgBox “第1个人名是:” & T(1) & “;第” & Size – 1 & “个人名是:” & T(Size – 1)

End Sub

代码截图:

动态数组的利用

代码讲解:

1)Dim T() As String 声明T()为动态数组

2)If Range(“A1”) <> “” And Range(“A2”) <> “” Then

Size = Range(“A1”).End(xlDown).Row

Else

MsgBox “工作表中没有人名的记入!”: End

End If

以上代码是处理A1 A2单元格的空值,并获得人名的数量。要注意上述代码中如果A1和A2单元格都是空格时会终止程序的运行。

3) ReDim T(Size – 1) 根据获得的人名数重新定义数组。

4) For i = 1 To Size – 1

T(i) = Cells(i + 1, 1)

Next

将人名填充数组

5) MsgBox “第1个人名是:” & T(1) & “;第” & Size – 1 & “个人名是:” & T(Size – 1)

提示最后的结果。

下面看代码运行的结果:

动态数组的利用

我们在A9单元格填入一个人名“猪九”,再次运行:

动态数组的利用

我们会得到上述正确的结果。

3 Preserve关键字的利用

如果在对数组大小进行调整时,希望在现有数组中保留数据,可以使用preserve关键字。我们看下面的代码:

Sub mynzC() ‘动态数组的应用2

Dim T() As String

If Range(“A1”) <> “” And Range(“A2”) <> “” Then

Size = Range(“A1”).End(xlDown).Row

Else

MsgBox “工作表中没有人名的记入!”: End

End If

ReDim T(Size – 1)

For i = 1 To Size – 1

T(i) = Cells(i + 1, 1)

Next

If Range(“H1”) <> “” And Range(“H2”) <> “” Then

SizeH = Range(“H1”).End(xlDown).Row

Else

MsgBox “工作表H列中没有人名的记入!”: End

End If

ReDim T(Size – 1 + SizeH – 1)

‘ReDim Preserve T(Size – 1 + SizeH – 1)

For i = 1 To SizeH – 1

T(Size – 1 + i) = Cells(i + 1, 8)

Next

MsgBox “第1个人名是:” & T(1) & “;第” & Size – 1 + SizeH – 1 & “个人名是:” & T(Size – 1 + SizeH – 1)

End Sub

代码截图:

动态数组的利用

代码讲解:上述代码实现了将两列人名数据填入数组中,在A列人员填充完成后,填充H列的人名数据,在填充前要再次扩充数组的大小,用了ReDim T(Size – 1 + SizeH – 1)这个语句,我们看下面代码执行的效果:

动态数组的利用

我们发现,第一个人名数据没有了,为什么呢?这是因为在使用 ReDim 语句更改动态数组时,数组中的现有值都会丢失。这时需要使用 ReDim Preserve 在保留数组中现有值的情况下扩展数组,所以在第二次扩展数组时,要用下面的语句:ReDim Preserve T(Size – 1 + SizeH – 1),再次运行代码:

动态数组的利用

这个时候,就出现了正确的结果。

今日内容回向:

1) 动态数组的特征是什么?

2) 什么时候采用动态数组?

3) 使用动态数组扩展数据时,如果想保留原有数据该用什么语句?

动态数组的利用

本讲内容参考程序文件:工作簿12.xlsm

分享成果,随喜正能量

VBA的应用及学习方法:

VBA是利用Office实现个人小型办公自动化的有效手段(工具)。这是我对VBA的应用界定。在取代OFFICE新的办公软件没有到来之前,谁能在数据处理方面做到极致,谁就是王者。其中登峰至极的技能非VBA莫属!

我记得20年前自己初学VBA时,那时的资料甚少,只能看源码自己琢磨,真的很难。20年过去了,为了不让学习VBA的朋友重复我之前的经历,我根据自己多年VBA实际利用经验,推出了七部VBA专门教程。

第一套:VBA代码解决方案 是VBA中各个知识点的讲解,教程共147讲,覆盖绝大多数的VBA知识点,提供的程序文件更是一座不可多得的代码宝库,是初学及中级人员必备教程;目前这套教程提供的版本是修订第二版,程序文件通过32位和64位两种OFFICE系统测试。

第二套:VBA数据库解决方案 数据库是数据处理的专业利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,适合中级人员的学习。目前这套教程提供的是修订第一版教程,程序文件通过32位和64位两种OFFICE系统测试。

第三套:VBA数组与字典解决方案 数组和字典是VBA的精华,字典是VBA代码水平提高的有效手段,值得深入的学习,是初级及中级人员代码精进的手段。目前这套教程提供的版本是修订第一版,程序文件通过32位和64位两种OFFICE系统测试。

第四套:VBA代码解决方案之视频 是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。这套教程是第一套教程(修订一版)的视频讲解,视频更易接受。

第五套:VBA中类的解读和利用是一部高级教程,讲解类的虚无与肉身的度化,类的利用虽然较少,但仔细的学习可以促进自己VBA理论的提高。这套教程的领会主要是读者的领悟了,领悟一种佛学的哲理。目前这套教程提供的版本是修订第一版,程序文件通过32位和64位两种OFFICE系统测试。

第六套教程:VBA信息获取与处理,是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。

第七套教程:VBA之EXCEL应用 这是一部初级教程这部教程共三册,从从创建宏、对话框、工作簿和工作表对象、单元格对象等基础内容讲起,到循环结构、错误处理、字符串操作、日期和时间、事件、数组应用,函数过程等方面,一直讲解到控件和窗体对象的应用都是我们提高自己EXCEL水平的必须。

以上各教程学习顺序:7→1(或者4)→3→2→6→5。其中第四套是对第一套的视频讲解,所以第一和第四只选其一即可。需要的朋友可以W: VBA6337

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/167713.html

(0)
上一篇 2025-01-16 09:20
下一篇 2025-01-16 09:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信