VBA信息获取与处理第四个专题第三节:VBA数组数据回填工作表

B站影视 2025-01-04 09:41 2

摘要:《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作

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

教程共两册,二十个专题。今日分享内容是:VBA信息获取与处理第四个专题第三节:VBA数组数据回填工作表

【分享成果,随喜正能量】心中有法喜、有慈悲,散发出来气质就是欢喜与祥和;这些可以从一个人的音声、动作中感受得到。。

这个专题,我们讲解工作表数据的处理的问题,对于VBA而言,我给予的定位是“实现个人小型数据自动化处理的利器”,对于大多数朋友而言,利用VBA是与EXCEL相关联的,很多的代码也是用于处理EXCEL内或者相关的各种数据,工作表更是作为和用户的交互对象而存在,那么对于工作表的数据如何进行查找,以及如何读取就是一个十分关键的课题,我们这讲就来主要讲解这个问题。

在前两节我们讲了如何将工作表中的数据读到数组中,这种操作的实质其实是:将数据预存到内存中,然后在内存中调取数据再进行下一步操作,这样可以节约反复提取数据的时间。

当我们在内存中将数据计算完成后,需要将结果数组回填给工作表,又要注意哪些问题呢?对于工作表而言,可以回填的是数组可以是一维或二维的。我们在这一节和下一节将讲解数组回填工作表的问题。本节先讲解一维数组的回填。

假设我们有一个一维数组,并希望从单元格A1开始将其写入工作表。代码必须首先调整目标范围的大小。例如下面的代码:

Sub MYNZE '一维数组数据的回填方案

Dim Arr As Variant

Dim MyRange As Range

Sheets("SHEET4").Select

Arr = Array("大象", "老虎", "狮子", "狐狸")

Set MyRange = Range("A1")

Set MyRange = MyRange.Resize(1, UBound(Arr) + 1)

MyRange.ClearContents

MyRange.Value = Arr

MsgBox "ok!"

End Sub

代码截图:

代码讲解:上述代码首先从Arr = Array("大象", "老虎", "狮子", "狐狸")中取得数组的数据,当然,这里我没有对取得的数组数据做任何的计算处理,只是回填的操作。在回填数据的时候,先获取要回填区域的基准单元格,这里我给出的是A1,然后将以这个单元格为基准进行扩展,扩展到和数组同样大小的区域:即 Resize(1, UBound(Arr) + 1),最后进行数据的回填。关于单元格的Resize属性,在我的教程《VBA代码解决方案》中有详细的讲解大家可以参考。

这里我们要注意的是对于对象变量的赋值用的是SET: Set MyRange = Range("A1"),这一点在我的教程《VBA中类的解读及应用》中已经详细的说明,大家要注意对象变量和普通变量的区别。

在整个代码中还利用了单元格的ClearContents属性对单元格进行回填前的清理工作。

最后我们看看代码的运行结果:

对于一维数组的回填我们还要注意:当回填区域比数组大时,多余的区域会出现”#N/A”符号,表示没有数据可以回填。

二维数组回填原则:如果将二维数组回填工作表,则需要使用“Resize”将目标范围调整为适当的大小。第一个维度是行数,第二个维度是列数。

下面的代码演示如何从单元格A1开始将数组Arr写入工作表:

Sub MYNZF '二维数组数据的回填方案

Dim Arr As Variant

Dim MyRange As Range

Sheets("SHEET4").Select

Arr = Sheets("SHEET2").Range("A1:b9")

Set MyRange = Range("A1")

Set MyRange = MyRange.Resize(UBound(Arr, 1), UBound(Arr, 2))

MyRange.ClearContents

MyRange.Value = Arr

MsgBox "ok!"

End Sub

代码的截图:

代码讲解:上述代码首先从工作表SHEET2中提取数据放到数组之中,这里的数据没有任何的修改:Arr = Sheets("SHEET2").Range("A1:b9"),对于基准单元格我们利用了Resize 语句来扩展单元格。MyRange = MyRange.Resize(UBound(Arr, 1), UBound(Arr, 2)) ,这个语句中UBound(Arr, 1)是扩展的是行数,UBound(Arr, 2)是扩展的是列数。

下面我们看代码的运行结果:

和一维数组的回填一样:当回填区域比数组大时,多余的区域会出现”#N/A”符号,表示没有数据可以回填。

本节知识点回向:数组数据如何回填到工作表?回填的原则是什么?

本专题参考程序文件:004工作表.XLSM

我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:

来源:VBA语言专业教育

相关推荐