ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 460|回复: 6

[已解决] 请教有关数组定义的解释

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-2-11 18:26 | 显示全部楼层 |阅读模式
本帖最后由 天地一相 于 2024-2-12 19:59 编辑

感谢。3个问题,1是 变量 i 的定义是否可以写成 i& 。2 是我原来数组的声明定义后没有括号,也能正常使用,但今天发现添加括号后速度快了很多,为什么?3 我赋值给数组的区域都是整数或空值0值,是否有一个数组的声明方式是速度最快的。
  1. Dim i As long, n As long, x As long
  2. Dim arr(), brr()
  3.       n = Range("B1").Value + 1
  4.     arr = Range("E2:E" & n)
  5.     brr = Range("I2:I" & n)
  6.      For x = 1 To 10000
  7.           For i = 1 To UBound(arr)
  8.               arr(i, 1) = arr(i, 1) + brr(i, 1)
  9.       Next i
  10.     Next x
  11.     Range("E2:E" & n) = arr
复制代码

TA的精华主题

TA的得分主题

发表于 2024-2-11 22:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
dim i,arr,brr 和 dim i as long,arr(),brr()速度差异有吗?需要具体数据做支撑才行

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-2-11 22:45 | 显示全部楼层
当你声明一个变量后,程序会在内存中开辟一个空间用来存储该变量的值。

不同类型的变量,所占用的内存是不一样的。
比如:
long,长整数型,占4个字节,即16个二进制位。
Variant,变体型,占16个字节,即64个二进制位。
可以,在读写速度上,声明为long比Variant更快一些。
在能够明确你所声明的变量是用来存储什么类型的数据时,尽量声明为对应的类型,
在不能明确你所声明的变量是用来存储什么类型的数据时,此时可声明为变体型,
如果不指明类型,例如 Dim i 默认为Variant型,即默认变体型。

关于简写:
Dim i as Integer 简写 Dim i% (整数型)
Dim i as long 简写 Dim i& (长整数型)
Dim i as Single 简写 Dim i!  (单精度浮点型)

Dim i as Double 简写 Dim i# (双精度浮点型)
Dim i as String 简写 Dim i$ (字符串型)
Dim i as String * 50 简写 Dim i$ * 50  (定长字符串型,具体最大字符数量可根据需要自行指定)
当声明了一个定长字符串型的变量时,默认值是以空字符(等于vbNullChar也等于chr(0))填充的。
当你给定长字符串型的变量赋予一个超出其长度的值时,超出的字符会被裁掉。


中规中矩的写法与简写的效果是一样的,只是书写起来简单一点而已。



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-2-11 22:52 | 显示全部楼层
3个问题
1是 变量 i 的定义是可以写成 i&,根据实际的数据量定义i%也是可以的,一般定义成i&,不会造成溢出,具体参考变量的范围
2 声明定义后没有括号,是指的一个变体变量,从工作表读取数据是形成的数据集是变体数组,因为是定义变体所以变体数组是可以赋值给变体变量 ,如果加了括号那么这是一个变体数组,读取的数据集就是变体数组直接就可赋值,类型一样,但要注意如果工作表取值范围只有一个值,定义成变体数组就会产生问题,这时是一个值不形成数组,但定义变体变量就不会出错。二者适用范围有些区别,速度的话没测试过。
3 赋值给数组的区域都是整数或空值0值,读取也是变体数组。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-12 09:03 | 显示全部楼层
本帖最后由 天地一相 于 2024-2-12 09:07 编辑
gwjkkkkk 发表于 2024-2-11 22:52
3个问题
1是 变量 i 的定义是可以写成 i&,根据实际的数据量定义i%也是可以的,一般定义成i&,不会造成溢出 ...

谢谢,基本看懂。你说工作表取值范围只有一个值的情况是指范围只有一个单元格的情况吗?若是,这种情况我刚好是避免的,因为我的范围在只有一个单元格时会退出执行的。不过我的arr初始状态是全是空值,加括号的速度变化,是同样的操作,就我示例的,速度从1.8秒,降低到0.98秒了。有人告诉我说,不加括号就是静态数组,加了就是动态数组,动态的需要后面知道具体范围了,重新定义范围。我没理解到底啥意思,但我也没重新定义,运行起来也没发现异常。而且我专门测试了,开始就给定义为一个具体范围的静态数组或重新定义,速度与初始声明只有括号的动态数组没区别。我第三个问题的意思是想问,若我即将给数组赋值的区域都是整数或空值,0 什么的,是不是能直接把数组也声明为整型之类的,会不会速度更快。要是可以,具体咋写。

TA的精华主题

TA的得分主题

发表于 2024-2-12 10:43 | 显示全部楼层
天地一相 发表于 2024-2-12 09:03
谢谢,基本看懂。你说工作表取值范围只有一个值的情况是指范围只有一个单元格的情况吗?若是,这种情况我 ...

第3个问题,读取的区域都是整数或空值,那么这个区域读取的数值也是变体数组,定义成整型数组,会产生类型不匹配。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-12 12:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
gwjkkkkk 发表于 2024-2-12 10:43
第3个问题,读取的区域都是整数或空值,那么这个区域读取的数值也是变体数组,定义成整型数组,会产生类 ...

谢谢,折腾了各种数组的定义和赋值方法,还是目前这种声明为动态数组,直接区域赋值,速度最快。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 19:35 , Processed in 0.030961 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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