excel学习库

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

VBA信息获取与处理第四个专题:工作表数据和数组之间的传输比较

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

教程共两册,二十个专题。今日分享内容是:VBA信息获取与处理第四个专题第一节:工作表数据和数组之间的传输比较

【分享成果,随喜正能量】人这一辈子,无非就四个字:钱、命、家、情。钱是什么?

钱是生活不可或缺的一部分,有钱走遍天下,没钱寸步难行。虽然钱不是万能的,但是没有钱是万万不能的。。

专题四 EXCEL工作表数据的读取、回填和查找

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

第一节 工作表数据和数组之间的传输比较

工作表单元格数据和VBA变量之间的数据传输是经常要应用的操作,这项操作占用的时间要比其他操作占用的时间要多,所以我们的原则是应将这种操作保持在最低的次数。通过一次操作(而不是一次单元格的操作)将数据传递给数组,或者将数组数据传递给工作表,这样可以大大提高Excel应用程序的性能。一般的原则是:如果需要对VBA中的数据进行大量计算,则应将工作表中的所有值传输到数组中,对数组进行计算,然后再将可能利用的数组数据回填到工作表。这样的操作可以将工作表和VBA之间传输数据的次数保持在最小值。例如将100个数组数据一次传输到工作表比传输100次,每次传输一个数据值的效率要高得多。

我们在VBA中处理数据时,一般有三种方案可以选择和利用,一是数组存储数据,二是字典存储数据,第三是不在内存中处理,直接在工作表中读取和处理。

1 将工作表数据存储在数组中,在内存中处理数据

我们先来讲解上面的第一种方案,将工作表数据存储在数组中,然后在内存中处理数据的方案,为了验证处理的效果,我们在工作表中给出了2000个数据,然后先将这些数据读到数组中,再在数组中求和计算,我们看下面的代码:

Sub MYNZ() '数组求和

t = Timer

Sheets("SHEET1").Select

Dim Arr() As Variant

Arr = Range("A1:A2000")

MYSUM = 0

For R = 1 To UBound(Arr, 1)

MYSUM = MYSUM + Arr(R, 1)

Next

t2 = Timer - t

MsgBox "总和为:" & MYSUM & Chr(13) & "运行时间:" & Format(t2, "0.00000") & "秒"

End Sub

代码截图:

这些代码对于中级以上的朋友是非常容易理解的,只是思路的问题。代码就不再讲解。

看看下面的运行结果:

运行结果:

2 将工作表数据存储在字典中,在内存中处理数据

我们再来讲解上面的第二种方案,将工作表数据存储在字典中,然后在内存中处理数据的方案,为了验证处理的效果,我们同样在工作表中给出了同样的2000个数据,然后先将这些数据读到字典中,再在求和计算,我们看下面的代码:

Sub MYNZA() '字典求和

t = Timer

Sheets("SHEET1").Select

Dim Arr() As Variant

Arr = Range("A1:A2000")

Set myDic = CreateObject("scripting.dictionary")

For i = 1 To UBound(Arr)

myDic(i) = Arr(i, 1) '初始化字典

MYSUM = MYSUM + myDic(i)

Next i

t2 = Timer - t

MsgBox "总和为:" & MYSUM & Chr(13) & "运行时间:" & Format(t2, "0.00000") & "秒"

End Sub

代码的截图:

代码的运行结果:

3 直接在工作表中处理数据

最后我们来讲解上面的第三种方案,直接在工作表中处理数据,为了验证处理的效果,我们同样在工作表中给出了同样的2000个数据,然后直接在工作表中对这些数据求和处理,我们看下面的代码:

Sub MYNZB() '工作表求和

t = Timer

i = 1

Sheets("SHEET1").Select

MYSUM = 0

Do While Cells(i, 1) <> ""

MYSUM = MYSUM + Cells(i, 1)

i = i + 1

Loop

t2 = Timer - t

MsgBox "总和为:" & MYSUM & Chr(13) & "运行时间:" & Format(t2, "0.00000") & "秒"

End Sub

代码截图:

代码的运行:

我们看看数据的运行结果,可以看出运行的效率,但要提醒大家注意:

① 不要一味的追求的效率,注意理解我的一篇文章《VBA程序的运行时间优化和视觉效果的兼顾》。

② 每种方案都有自己的可利用价值,比如字典的排重是非常有效的手段。

本节知识点回向:实现数据在工作表和VBA之间的传输有哪些方案?各是什么?注意根据自己的经验理解每种方案的优缺点。

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

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

发表评论:

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

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