暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数组的创建及回填

VBA语言专家 2021-12-29
519
【分享成果,随喜正能量】一辈子不长,开心是过,不开心也是过。与其把短暂的一生浪费在痛苦哀愁上,不如乐观点,看开点。学会感恩,学会知足,学会快乐,你的人生基调要靠你自己去主导。
《VBA数组与字典方案》教程是我推出的第三套教程,目前已经是第一版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。七、三、一套教程掌握后,可以解决大多数工作中遇到的实际问题。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第29讲:数组的创建及回填

第二十九讲  数组的创建方法小结及回填的注意事项

大家好,我们今日继续VBA数组与字典解决方案的讲解,在最近的数组讲解中讲了很多基本的操作和概念,那么VBA数组有哪些创建的方法呢?数组和工作表又是如何对应呢?

1  使用Array函数创建数组

这种方法很简单,如:arr = Array("张一", "徐一", "陈一", "王一")

2  使用Split函数创建数组

Split的作用是把一个文本,根据指定的分隔符,建立一个数组。感觉就有点像EXCEL中的基础操作中的“分列”。不同的是“分列”操作是将一个单元格的文本按指定的分隔符分开,存放在同行的多个单元格里,而Split的作用是将一个文本(也可以是存放在单元格里的)按指定的分隔符分开,存放在一个数组变量里。
如:arr = Split("张一,徐一,陈一,王一,许一,张二,陈二,张三,徐二,张四", ",")  

特别注意点:用Split把文本转换成数组,索引号总是从0开始。不管你是否使用了Option Base语句,这点和Array不同。

3  通过Range赋值创建数组

如下面的代码:创建了数组并赋值。 
     Dim arr(1 To 29)
     For i = 1 To 29
     arr(i) = Cells(i, 1)
     Next

4  直接等于某单元格区域

这个很简单,直接数组名等于单元格区域就可以了。比如想把A1:A100单元格的值给数组arr,代码还可以简单写为:arr = [a1:a20] 。
那么这里的的arr是什么类型的数组呢?大家要注意,这个数组是二维数组

如下代码:

Sub MyNZsz_29() '第29讲  VBA数组的创建方法总结及数组回填到工作表的注意事项
arr = [a1:a20]
 Sheets("29").Select
 r = 2
For t = LBound(arr) To UBound(arr)
Cells(r, 3) = arr(t)
r = r + 1
Next
End Sub
在运行是会报错:

我们修正代码:

运行:

5  数组回填到工作表的特别注意点

1)  一维数组写入单元格区域时,这个单元格必须是水平方向的,也就是一个一行多列的单元格区域,如果想写入垂直区域,必须使用工作表的Transpose函数转换一下;
2 ) 和工作表的多单元格数组公式一样,数组写入单元格时,单元格的区域必须和数组的大小一致。


今日内容回向:
1  数组的常见创建方法有哪些?
2   如何理解工作赋值给数组是一个二维数组?


我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
 
【分享成果,随喜正能量】每个人在这个世界上都是独一无二的,你有你的长处,即便你到现在还一无所知。永远不要丧失自我欣赏的能力。也许你对自己的现状有所不满,但你要相信那是因为你还没找到真正的发力点。不要就此沉沦,不要因此放弃。多尝试,多改变,天生我材必有用。
文章转载自VBA语言专家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论