Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1300|回复: 4

[已解决]单元格内容赋值给数组

[复制链接]
发表于 2022-1-24 10:56 | 显示全部楼层 |阅读模式
求助,为什么用动态数组时,不能将单元格的内容逐一赋值给该数组?

Public Sub test()
Dim a() As Variant
Dim i As Integer
For i = 0 To 10
a(i) = Cells(i + 1, 2).Value
Next i
End Sub

报错如下:


最佳答案
2022-1-25 16:13
Yunyun123 发表于 2022-1-25 14:33
感谢回复。
我要做的是把查找到的内容存到数组中,但是不确定会查到多少,所以没有定义数组的大小。
我 ...

对于这种情况,有3种思路:
思路1:
先定义一个较大的数组,待元素写入完毕后,再重定义数组,将后面空的部分去掉。
现在的电脑,内存都很大,定义个几万个元素的数组对系统来说,是十分轻松的。更甚者,有些网友干脆把后面“重定义数组,去掉空部分”的步骤都省去。
思路2:
边重定义数组大小,边增加数组元素。
思路3:
先将内容暂存于单元格内,待前面的步骤完成后,
再将单元格一次性写入数组。

上述3种思路各有优缺点,楼主要视自己的实际情况选用。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2022-1-24 12:00 | 显示全部楼层
本帖最后由 砂海 于 2022-1-24 12:17 编辑

动态数组 此时还是空的 ,
要 先 redim

回复

使用道具 举报

发表于 2022-1-24 15:33 | 显示全部楼层
对于动态数组,必须定义了大小后,才能用索引赋值。
因此,要不您一开始就Dim a(0 To 10) As Variant,
要不赋值前来一句ReDim a(0 To 10),
只有这样确定了数组的大小,才能用索引号逐个给数组的元素赋值。
这样一来,所得到的是一个由a(0)~a(10)共11个元素的一维数组。

又或者用单元格整体赋值的方式,那就不用先定义数组大小,如:
Dim a() As Variant
a = Cells(1, 2).Resize(11).Value
与上面的不同,这样一来,所得到的是一个由a(1,1)~a(11, 1)共11个元素的二维数组。

如果数据量大的话,单元格整体赋值与索引号逐个赋值相比,
不仅代码精简不少,速度还快很多,楼主可根据自己的实际情况按需使用。
回复

使用道具 举报

 楼主| 发表于 2022-1-25 14:33 | 显示全部楼层
vitrel 发表于 2022-1-24 15:33
对于动态数组,必须定义了大小后,才能用索引赋值。
因此,要不您一开始就Dim a(0 To 10) As Variant,
...

感谢回复。
我要做的是把查找到的内容存到数组中,但是不确定会查到多少,所以没有定义数组的大小。
我把内容存到数组之后,还要再依次调用数组中的内容,数组定义的太大,会有问题吧?
回复

使用道具 举报

发表于 2022-1-25 16:13 | 显示全部楼层    本楼为最佳答案   
Yunyun123 发表于 2022-1-25 14:33
感谢回复。
我要做的是把查找到的内容存到数组中,但是不确定会查到多少,所以没有定义数组的大小。
我 ...

对于这种情况,有3种思路:
思路1:
先定义一个较大的数组,待元素写入完毕后,再重定义数组,将后面空的部分去掉。
现在的电脑,内存都很大,定义个几万个元素的数组对系统来说,是十分轻松的。更甚者,有些网友干脆把后面“重定义数组,去掉空部分”的步骤都省去。
思路2:
边重定义数组大小,边增加数组元素。
思路3:
先将内容暂存于单元格内,待前面的步骤完成后,
再将单元格一次性写入数组。

上述3种思路各有优缺点,楼主要视自己的实际情况选用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-6 03:55 , Processed in 0.314755 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表