excelvba针对性比较强,就是excel文件中的行列,以及单元格,工作表,工作薄,图表,图形等对象,很明确“我”能干什么。
数组技术在excelvba中是个十分实用的基础技术,它更多的是针对excel行列的操作,行列纵横之间十分有趣。
数组存储在内存当中,所以数组有速度快的特点,当然也有数据易失性(内存的暂存性)的缺点,优点与缺点总是相对的。
数组的分类
- 一般分为常量数组,静态数组,动态数组。
- 如果按维度区分则分为一维数组,二维数组,三维数组……60纬数组。(新版的excel并不存在60纬的上限。)
- 我们常用的就是一维和二维数组。
Sub test2()
Dim arr1(3)
Dim arr2(1 To 3)
Dim arr3(1 To 3, 1 To 2)
Dim arr4(3, 2)
End Sub
我们打开视图--本地窗口,可以很直观的观察数组的结构。
arr1(3)代表从0到3的一维数组。
arr2(1 To 3)代表从1到3的一维数组。
数组的维度
- excel中的一行或一列可以转换1维数组
-
excel中的多行多列可以转换成2维数组
在VBA中与我们直观的理解略有区别。
image.png
一行4列的单元格数据并非一维数组而是二维arr(1 to 1,1 to 4),同样的一列4行的数据同样也是二维数组。
Sub test5()
arr = Range("a1:d1")
End Sub
image.png
- 二维数组转一维数组
Sub test5()
arr = Range("a1:d1")
arr1 = Application.Transpose(Application.Transpose(arr))
End Sub
通过两层转置将二维转为一维。
image.png
- 数组一些常见的表达方式
Sub test1()
arr1 = [{"A","B","C","D"}]'①
arr = Array(1, 2, 3, 4)'②
End Sub
①表示直接写数组的方式,[]里面{}中写入元素,元素中间为逗号分开。
②表示用array函数构造数组。
向数组中写入数据
- 直接写入
Sub 向数组中指定的位置写入数据()
Dim arr(1 To 10)
arr(3) = "一"
arr(5) = "周"
arr(7) = "大"
arr(9) = "佬"
End Sub
按F8逐步运行后看到本地窗口中数组中空值的变化。
image.png
- 循环写入 image.png
Sub 循环向数组中写入数据()
Dim arr(1 To 4)
For Each Rng In [a1:a4]
n = n + 1
arr(n) = Rng
Next
End Sub
设置断点或者F8逐步运行后看到将单元格的值循环写入数组。
image.png- 单元格批量写入
Sub 单元格区域数据批量写入数组()
arr = [a1:a4])
End Sub
image.png
数组的取值
Sub 方法1循环取数()
arr = [a2:a9]
[b1] = arr(2, 1)
For i = 1 To 8
Cells(i, 3) = arr(i, 1)
Next
End Sub
---
Sub 方法2一次性取数()
arr = [a2:a5]
Range("d1:d" & 4) = arr
End Sub
---
Sub transpose转置()
arr = [a2:a5]
arr1 = Application.Transpose(arr)
[a7:d7] = arr1
[a8:c8] = arr1
[a9:e9] = arr1
End Sub
网友评论