ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: wanghan519

[推荐] vba里好用一点的数组

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-10-24 10:33 | 显示全部楼层
能不能操作二维数组。一维数组的这些东西感觉没啥用处

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-24 10:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wanghan519 于 2023-10-24 10:46 编辑
chenwenyong 发表于 2023-10-24 10:33
能不能操作二维数组。一维数组的这些东西感觉没啥用处

比如二维数组,想在第一维加一行,用push就行。。。
所以说,排序、去重之类的只是添头,重点是push pop这些是给vba引入了动态数组,写起来方便很多,当然这东西有bug,且比用数组慢。。。

image.png

TA的精华主题

TA的得分主题

发表于 2023-10-24 13:28 | 显示全部楼层
本帖最后由 caiyu93 于 2023-10-24 13:32 编辑

o.png
求速度还是在纯数组环境下体验感是最好的
因为你对象在函数或方法内如果多次实例化,速度反而会很慢
就比如
  1. For i = 1 to 10
  2.     call Test
  3. Next

  4. Sub Test()
  5.     Set myArray =new myarrayobject??
  6. End Sub
复制代码

如果要填充数组某一块区域,直接按一次分配新区域填充就好了,这样写比下面这个方案快的多,因为只扩充一次下标,不会像下面这样会为每一次循环动态分配数组内存区域
  1. For i = 0 To Ubound(t)
  2.    Redim Preserve arr(i)
  3.    arr(i)=xxx
  4. next
复制代码
上面截图方案除了可读性稍微差一点,如果会用的话也挺简单.就是如果不熟的话,还是谨用,可能会导致数据丢失和Excel崩溃,而且省去了你再码一次For来填充arr数组,代码量减少是其次,拷贝数组速度会比你循环填充N次更快



TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-24 13:45 | 显示全部楼层
caiyu93 发表于 2023-10-24 13:28
求速度还是在纯数组环境下体验感是最好的
因为你对象在函数或方法内如果多次实例化,速度反而会很慢
就 ...

确实,速度优先时还是要直接用数组,copymemory更快

这个类就是为了,方便写。。。

比如31楼的例子是想表达,vba数组只能redim最后一维,需要扩展第一维就比较麻烦了,而动态数组写起来简单很多,仅此而已

TA的精华主题

TA的得分主题

发表于 2023-10-24 13:57 | 显示全部楼层
wanghan519 发表于 2023-10-24 13:45
确实,速度优先时还是要直接用数组,copymemory更快

这个类就是为了,方便写。。。

这只能给自己用,前提电脑上有相对完整的net库,如果有的旧电脑,很可能就没有,即使拿到了这个cls类文件导入进去也是白搞

TA的精华主题

TA的得分主题

发表于 2023-12-7 19:19 来自手机 | 显示全部楼层
caiyu93 发表于 2023-10-24 13:28
求速度还是在纯数组环境下体验感是最好的
因为你对象在函数或方法内如果多次实例化,速度反而会很慢
就 ...

谁循环里用Redim Preserve 、都知道这会降速、误导学子

TA的精华主题

TA的得分主题

发表于 2023-12-7 19:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我想提问的是,为什么非得是“类”。。。如果不是为了高度集成,写多几个单功能自定义函数不可以吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-7 19:58 来自手机 | 显示全部楼层
morpheus126 发表于 2023-12-7 19:47
我想提问的是,为什么非得是“类”。。。如果不是为了高度集成,写多几个单功能自定义函数不可以吗?

也有函数形式的https://github.com/todar/VBA-Arrays,对于二维数组用起来有点不同
前面也说了,只用vba都能写,这些库就是方便

TA的精华主题

TA的得分主题

发表于 2023-12-7 22:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wanghan519 发表于 2023-12-7 19:58
也有函数形式的https://github.com/todar/VBA-Arrays,对于二维数组用起来有点不同
前面也说了,只用vba ...

看了下清单,从日常需求来说,使用频率应该不高
谢谢分享。。。发现它代码里的错误了。。。

TA的精华主题

TA的得分主题

发表于 2023-12-7 23:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
morpheus126 发表于 2023-12-7 19:47
我想提问的是,为什么非得是“类”。。。如果不是为了高度集成,写多几个单功能自定义函数不可以吗?

我觉得用类应该是习惯,因为开发者大概并不是只会vba,肯定也是面向对象开发的程序员,所以用类更符合习惯。

另外就是,确实用类更合理,在开发通用性的代码时,类写起来更方便。你如果把代码都仔细过一遍,就会发现,里面有写功能,其实用单独的函数来写,反而更麻烦
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-6 18:45 , Processed in 0.049924 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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