ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 关于动态数组的一点疑惑

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-26 09:51 | 显示全部楼层 |阅读模式


Sheet1是原始数据,Sheet2效果是想要达成的。我写的数组的代码实现的。就是疑惑arr()有括号和没有括号的区别在哪里。上面是我测试的几种情况。就是对概念不是很懂。求大神指点,有括号和没有的区别,谢谢!
666.png

关于数组的问题.rar

57.71 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2023-2-26 10:36 来自手机 | 显示全部楼层
带括号的arr是一个不指定类型的数组变量,不带括号的arr是一个不指定类型的变量,什么都可以装。建议不要带括号,适用性更强

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-26 12:33 来自手机 | 显示全部楼层
ivccav 发表于 2023-2-26 10:36
带括号的arr是一个不指定类型的数组变量,不带括号的arr是一个不指定类型的变量,什么都可以装。建议不要带 ...

谢谢

TA的精华主题

TA的得分主题

发表于 2023-2-26 13:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-2-27 11:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 905738810 于 2023-2-27 11:46 编辑

以下是我个人的理解,不一定全对:
image.jpg

1、上图画了变体Variant类型和数组类型的区别
图中arr是Variant类型,brr是数组类型

2、arr这个Variant类型相当于一个容器可以装任何数据,当他装了一个数组后,只是装了数组的地址位置
使用arr(0)取数据时需要在arr容器里查找数组的地址位置,然后再去数组的真是位置查找数据,最终返回数据

3、brr因为声明时使用了brr()声明,所以他本身就是数组,他指向的就是数组的真是地址位置
使用brr(0)取数据时可以直接查找到数据

4、由上可以看出,Variant类型取数据是需要两步,而数组类型只需一步,所以Variant类型速度会慢于数组类型

5、arr因为有一个容器所以arr变量可以赋值任何数据,例如:
Sub test()
    Dim arr() As Variant
    arr = Array(1, 2, 3)
    testfn arr
End Sub
Function testfn(arr As Variant)

End Function

上述代码不会报错,这也是很多人喜欢变体的原因,
但是不报错也会导致写代码时发现不出代码的bug。

6、brr是数组类型,所以必须赋值数组
Sub test()
    Dim brr As Variant
    brr = Array(1, 2, 3)
    testfn brr
End Sub
Function testfn(brr() As Variant)

End Function
上述代码是会报错,因为类型不对,brr()不能赋值变体,需要改成统一的类型如下
Sub test()
    Dim brr() As Variant
    brr = Array(1, 2, 3)
    testfn brr
End Sub
Function testfn(brr() As Variant)

End Function




评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-2-27 15:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 23:02 , Processed in 0.044557 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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