【VBA研究】怎样将单元格数据赋给数组[通俗易懂]

【VBA研究】怎样将单元格数据赋给数组

大家好,又见面了,我是全栈君。

作者:iamlaosong

将工作表中的数据赋给数组或者将数组的数据赋给工作表,一般有两种。一种是循环的方法,一个一个的传,这样的方法一般用于须要对每一个数据特别处理的场合,还有一种是一次性用赋值语句传,就速度来说,另外一种方法要快得多。看以下例程:

Sub tt()
    Dim arr1(240000, 4)
    Dim arr2()
    
    lineno = [A1048576].End(xlUp).Row      '行数
    '循环给数组赋值。数组myarr必须先定义大小
    t1 = Now()
    For i = 3 To lineno
        k = i - 2
        arr1(k, 1) = Cells(i, 1)
        arr1(k, 2) = Cells(i, 2)
        arr1(k, 3) = Cells(i, 3)
        arr1(k, 4) = Cells(i, 4)
    Next i
    t2 = Now()
    Cells(2, 5) = TimeValue(t2) - TimeValue(t1)
    '一次性给数组赋值。数组arr不能定义大小和类型
    t1 = Now()
    arr2 = Range("a3:d" & lineno)
    t2 = Now()
    Cells(2, 6) = TimeValue(t2) - TimeValue(t1)
    MsgBox arr1(20000, 2) & "=" & arr2(20000, 2)


End Sub

只是要注意的是,循环赋值的方法数组必须先定义维数和大小,然后才干使用,而一次性赋值的正好相反。不能定义维数和大小,否则会报错。此外注意,数据一次性读入数组arr2后。arr2成为一个二维数组。即使是读取一列数据。也是二维数组,数组下标都是从1開始,即arr2(1,1),arr2(2,1),arr2(3,1),arr2(4,1),。。

另一点要注意,当读取的工作表非当前工作表时。range对象后面须要加上valuekeyword,否则会报错,比如:

    '方法一:直接读取
    DaiLiNo = Sheets("代理点").[B65536].End(xlUp).Row           '行数
    DaiLiName = Sheets("代理点").Range("B2:B" & DaiLiNo).Value
    '方法二:激活工作表后读取
    Worksheets("代理点").Select
    DaiLiNo = [B65536].End(xlUp).Row           '行数
    DaiLiName = Range("B2:B" & DaiLiNo)
    DaiLiNo = DaiLiNo - 1                      '数据从第2行開始,所以总数量要减一

假设赋值范围用行列号表示,则用下列语句(pos_fst, pos_ems是两个參数,各自是数据起始行和数据所在列):

maxrow = Cells(65536, pos_ems).End(xlUp).Row

Mail = Range(Cells(pos_fst, pos_ems), Cells(maxrow, pos_ems))

用上面的例程測试发现,即使20多万条数据,第一种方法用时非常少(4.62963E-05)。而另外一种方法却差点儿不用时间(0)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115418.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DOS攻击工具(dos攻击教程)

    DOS攻击工具(dos攻击教程)DoS(DenialOfService)攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃然而随着网络上免费的可用DDoS工具增多,DoS攻击也日益增长,下面介绍几款Hacker常用的DoS攻击工具。特别提示:仅用于攻防演练及教学测试用途,禁止非法使用。1、卢瓦(LO…

    2022年4月18日
    558
  • Golang语言快速上手到综合实战高并发聊天室[通俗易懂]

    Golang语言快速上手到综合实战高并发聊天室

    2022年2月8日
    46
  • mysql登陆方法_开心网登录

    mysql登陆方法_开心网登录登录mysqlu 用户名 -p 用户对应密码 -h 主机socket:(IP地址:端口号) eg:192.168.10.113:3306 1.方法:mysql-uroot-p密码 mysql-uroot-p mysql-hlocalhost-uroot-p (1)mysql-uroot-p123…

    2022年4月19日
    36
  • docker端口映射无法访问的解决

    docker端口映射无法访问的解决表现systemctlstatusdocker,显示正常,可以pull,push,build宿主机访问外网没问题,可以连上ubuntu的阿里的源运行容器映射的端口在本机无法访问,用curl127.0.0.1:端口,显示:curl:(56)Recvfailure:Connectionresetbypeerdockerbuild的时候,使用apt-getinstallxx,无法访问,哪怕镜像源是国内的阿里之类的.在改为dockerbuild–networkho

    2022年10月17日
    2
  • linux下载安装yum(ubuntu安装yum工具)

    自动搜索最快镜像插件:yuminstallyum-fastestmirror安装yum图形窗口插件:yuminstallyumex1、安装yuminstall全部安装yuminstallpackage1安装指定的安装包package1yumgroupinsallgroup1安装程序组group12、更新和升级yumupdate全部更新yumupdatepackage1更新指定程序包package1yumcheck-update

    2022年4月15日
    53
  • 盘点六大开源云计算平台「建议收藏」

    开源技术目前已经运用到云计算的每一个地方,在Hypervisor层面,KVM、Xen都是很优秀的虚拟化底层引擎,在管理接口方面,Libvirt是一个被广泛使用的组件,而Eucalyptus、OpenCloud、Convirt、Nebula等都是很不错的云计算框架和管理软件。目前的OpenStack开源云框架也受到了大多数主流厂商的支持和追捧。  云计算的最终目的是实现灵活、自由的资源分

    2022年4月11日
    80

发表回复

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

关注全栈程序员社区公众号