ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA数组定义的区别

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-9 16:58 | 显示全部楼层 |阅读模式
本帖最后由 陈宫在家吗 于 2022-12-10 15:59 编辑

请教大家,dim arr1, arr2(), arr3(1 to 100, 1 to 20)到底何时该用哪种?

经常在编写时分不清该如何使用,等到报错后再一个个试。
比如前两天我编写一段vba程序时,用的dim arr(),后面在for 循环里多次给它赋值 arr = range("A1:N" & x),然后就报错。改为dim arr就好了。没明白这是怎么回事?


感谢大家的帮助!
现在还有一个问题没弄明白,就是8楼说的“循环将arr2添加到arr1里”,这个是否必须行、列分别循环写入?还是有其他简便方法?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-9 17:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
还有个问题就是数组如何合并?比如一个工作簿,想将每一页的A1:F7都提取合并都一个数组里,我之前是复制、粘贴到某一页,然后整体赋值给一个数组的。
请教大家有没有其他好的方法?

TA的精华主题

TA的得分主题

发表于 2022-12-9 17:29 | 显示全部楼层
VBA的数组合并很麻烦,需要提前考虑数组的维度大小,不如用JSA,直接扩充就是

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-9 17:53 来自手机 | 显示全部楼层
本帖最后由 smsn 于 2022-12-9 17:56 编辑

简单点说
arr1 一个变量,可代表数值,文本,对象 variant 等等...

arr2() 数组,使用前还要再redim行列,俗称动态数组

arr3(1 to 100, 1 to 20) 已经定义好的数组,100行,20列

百度一下 vba 数组  有更详细的教程。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-9 18:02 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
vba数组合并没啥好方法,一般常用循环遍历到新数组。看情况有时候join到文本合并后再split,或是借用javascript合并。

TA的精华主题

TA的得分主题

发表于 2022-12-9 18:50 | 显示全部楼层
定义dim arr(),arr = range("A1:N" & x).value;arr是数组,.value不能省略。(实际上不省略是个好习惯)



定义dim arr,arr = range("A1:N" & x).value 或  arr = range("A1:N" & x),arr是变体变量


数组赋值:1.从单元格直接赋值,2.从其他数组赋值 3.省略

定义一个足够大的数组用来装数据就行,dim arr3(1 to 6666,1 to 20),然后用K计数,reszie(k,ubound(arr3,2))
输出到工作表就行。不需要纠结大数组效率问题,即使用足球场那么大的空间来打篮球,也绰绰有余,不会有多少影响。



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-10 01:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-12-10 09:45 | 显示全部楼层
本帖最后由 MOY838840554 于 2022-12-10 09:58 编辑
陈宫在家吗 发表于 2022-12-9 17:06
还有个问题就是数组如何合并?比如一个工作簿,想将每一页的A1:F7都提取合并都一个数组里,我之前是复制、 ...

汇总的数组:Arr1 定义大小(1 to 7*页数,列数)
当前页数组:Arr2=Range
然后循环将arr2添加到arr1里

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-10 11:07 | 显示全部楼层
感谢楼上各位!谢谢大家!我再试试,学习学习!

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-10 11:42 | 显示全部楼层
jiangxiaoyun 发表于 2022-12-9 18:50
定义dim arr(),arr = range("A1:N" & x).value;arr是数组,.value不能省略。(实际上不省略是个好习惯)
...

“定义一个足够大的数组用来装数据就行,dim arr3(1 to 6666,1 to 20),然后用K计数,reszie(k,ubound(arr3,2))
输出到工作表就行。不需要纠结大数组效率问题,即使用足球场那么大的空间来打篮球,也绰绰有余,不会有多少影响。”

这种方式的话,赋值到数组,是不是用行、列分别循环,逐个写入数组的?我用页、行、列三重循环实现了。

本来是想试试能否:第一页单元格区域整体赋值,然后下一页的单元格区域整体赋值添加进数组……循环到最后一页结束,这样只要一重循环。但没能实现。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 10:33 , Processed in 0.038756 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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