《VBA信息获取与处理》教程是我推出第六套教程,目前已经是初版修订了。
这套教程定位于最高级,是学完低级,中级后的教程。
这部教程给大家讲解的内容有:跨运用程序信息得到、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板运用、Split函数扩展、事情表信息与其他运用交互,FSO工具的利用、事情表及文件夹信息的获取、图形信息的获取以及定制事情表信息函数等等内容。
程序文件通过32位和64位两种OFFICE系统测试。
是非常抽象的,更具研究的代价。

教程共两册,八十四讲。
今日的内容是专题四“EXCEL事情表数据的读取、回填和查找”的第2讲:如何将事情表数据赋值给数组

第二节 将事情表数据写入VBA数组

在上一节中我们讲了实现事情表数据与VBA代码间传输的几种方法,这讲我将我们将着重讲解如何将事情表的数据写入数组。

php数组赋值公式若何将工作表数据赋值给数组 GraphQL

1 读取事情表上的范围并将其放入数组

在VBA中,可以直接读取事情表上的范围并将其放入数组,这种方法非常大略。
例如,

Dim Arr() As Variant

Arr = Range("A1:C5")

上述代码中首先声明一个变体型可变数组变量,然后将这个变量指向指定的区域,如果我们不能确定这个区域的大小,或者这个区域是可变的,我们可以利用下面的语句;

① myarr = Sheets("41").UsedRange

② myarr = Sheets("40").[a1].CurrentRegion

③ myarr = Range("a2:c" & Range("c2").End(xlDown).row)

④ myarr = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).row)

⑤ myarr = Range("a2:f" & [a65536].End(xlUp).Row)

⑥ myarr1 = Range([A2], [A65536].End(xlUp))

上面的各种写法均是我的第三套教程《VBA数组与字典办理方案》中的一些实际写法,第一种表示全体事情表的利用区域,第二种因此“A1”单元格为出发点的矩形区域,第三种是表示A2到C列末了一个不为空的单元格的矩形区域,第四种是表示A列的利用区域(含空格),第五种是A2到F列的末了利用单元格的区域(适用于低版本的excel),第六种是A列第二个单元格之下的利用区域(含空单元格)

2 读取事情表上指定例模得到数组后维数的确认

利用上述方案将事情表中的数据引入VBA数组后,我们要把稳该数组始终是二维的。
第一个维度是行,第二个维度是列。
因此,下面的例子:

Dim Arr() As Variant

Arr = Range("A1:C5")

Arr被隐式地调度为Arr(1 to 5,1 to 3),个中5是行数,3是列数。
纵然事情表数据位于一行或一列(例如,Arr(1 to 10,1 to 1))中,也会创建二维数组。
加载事情表数据的数组始终具有即是1的下限(LBound),而不管模块中可能具有什么选项基指令。
你不能改变这种行为。
例如:

Dim Arr() As Variant

Arr = Range("A1:A10")

这里,Arr由VBA自动标注为Arr(1 to 10,1 to 1)。
您可以利用如下代码在事情表值数组中循环:

Sub MYNZC()

Dim Arr() As Variant

Arr = Range("A1:B10")

Dim R As Long

Dim C As Long

For R = 1 To UBound(Arr, 1) ' 数组第一维表示行.

For C = 1 To UBound(Arr, 2) '数组第二维表示列

Debug.Print Arr(R, C)

Next

Next

End Sub

代码截图:

代码的运行:

3 事情表上指定例模如果是一个单元格时

在将指定的范围数据引入数组时很多的时候我们会碰着一种特例,便是只有一个单元格,这个时候每每利用上述方法会报错,有的时候是数组的赋值报错,有的时候是数组的高下标报错,视详细的代码运用而定。
这个缺点该该如何处理呢?我们可以利用下面的代码:

Sub MYNZD() '当事情表上的区域是单个单元格时

Dim Arr As Variant

Sheets("Sheet3").UsedRange.Select

m = Selection.Cells.Count

If m = 1 Then

ReDim Arr(1 To 1, 1 To 1)

Arr(1, 1) = Sheets("Sheet3").UsedRange

MsgBox Arr(1, 1)

Else

Arr = Sheets("Sheet3").UsedRange

MsgBox Arr(1, 1)

End If

End Sub

代码截图:

上面的代码成功的避免了这种缺点。
大家在利用这种数组赋值时避免这类缺点的发生。

本节知识点回向:读取指定例模的数据到数组有哪些方法可以利用?读取后的数组是几维数组?如何避免指定例模只有一个单元格的情形?

本专题参考程序文件:004事情表.XLSM

我20多年的VBA实践履历,全部浓缩不才面的各个教程中,教程学习顺序:

① 7→1→3→2→6→5或者7→4→3→2→6→5。

② 7→8

各套教程内容简介:

第7套教程(共三册):《VBA之EXCEL运用》:是对VBA基本的讲解

第1套教程(共三册):《VBA代码办理方案》:是入门后的提高教程

第4套教程(16G):VBA代码办理方案之视频(第一套的视频讲解)

第3套教程(共两册):《VBA数组与字典办理方案》:是对数组和字典的专题讲解

第2套教程(共两册):《VBA数据库办理方案》:是对数据库的专题讲解

第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序运用

第5套教程(共两册):VBA中类的解读和利用:类及接口技能的讲解

第8套教程(共三册):VBA之Word运用(最新教程):word中VBA的利用

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