《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。
这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:数组与字典解决方案第二十九讲 数组的创建方法小结及回填的注意事项
【分享成果,随喜正能量】心静者高,高者俯瞰世界;心和者仁,仁者包容万物;心慈者深,深者淡对冷暖;心慧者安,安者笑对人生。
第二十九讲 数组的创建方法小结及回填的注意事项
大家好,我们今日继续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
代码截图:
在运行是会报错:
我们修正代码:
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, 1)
r = r + 1
Next
End Sub
代码截图:
运行:
5 数组回填到工作表的特别注意点
1) 一维数组写入单元格区域时,这个单元格必须是水平方向的,也就是一个一行多列的单元格区域,如果想写入垂直区域,必须使用工作表的Transpose函数转换一下;
2) 和工作表的多单元格数组公式一样,数组写入单元格时,单元格的区域必须和数组的大小一致。
今日内容回向:
1 数组的常见创建方法有哪些?
2 如何理解工作赋值给数组是一个二维数组?
我多年的VBA实践经验,全部浓缩在以下教程中: