excel学习库

excel表格_excel函数公式大全_execl从入门到精通

动态数组的利用

今日的内容是“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

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

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

4) For i = 1 To Size - 1

将人名填充数组

5) MsgBox "第1个人名是:" & T(1) & ";第" & Size - 1 & "个人名是:" & T(Size - 1)

提示最后的结果。

下面看代码运行的结果:

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

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

3 Preserve关键字的利用

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

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

If Range("H1") <> "" And Range("H2") <> "" Then

SizeH = Range("H1").End(xlDown).Row

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

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)

MsgBox "第1个人名是:" & T(1) & ";第" & Size - 1 + SizeH - 1 & "个人名是:" & T(Size - 1 + SizeH - 1)

代码讲解:上述代码实现了将两列人名数据填入数组中,在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之EXCEL应用 这是一部初级教程这部教程共三册,从从创建宏、对话框、工作簿和工作表对象、单元格对象等基础内容讲起,到循环结构、错误处理、字符串操作、日期和时间、事件、数组应用,函数过程等方面,一直讲解到控件和窗体对象的应用都是我们提高自己EXCEL水平的必须。

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

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接