ExcelVBA——数组(1)

ExcelVBA——数组(1)_第1张图片
image.png

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的一维数组。

Dim arr3(1 To 3, 1 To 2)代表1到3,1到2的二维数组,当然也可以直观的理解为有3个柜子,每个柜子里有2个格子。而从excel表格中表现就是下图:
image.png
ExcelVBA——数组(1)_第2张图片
image.png

数组的维度

  1. excel中的一行或一列可以转换1维数组
  2. excel中的多行多列可以转换成2维数组
    在VBA中与我们直观的理解略有区别。


    image.png

    一行4列的单元格数据并非一维数组而是二维arr(1 to 1,1 to 4),同样的一列4行的数据同样也是二维数组。

Sub test5()
arr = Range("a1:d1")
End Sub
ExcelVBA——数组(1)_第3张图片
image.png
  • 二维数组转一维数组
Sub test5()
arr = Range("a1:d1")
arr1 = Application.Transpose(Application.Transpose(arr))
End Sub

通过两层转置将二维转为一维。
ExcelVBA——数组(1)_第4张图片
image.png
  • 数组一些常见的表达方式
Sub test1()
arr1 = [{"A","B","C","D"}]'①
arr = Array(1, 2, 3, 4)'②
End Sub

①表示直接写数组的方式,[]里面{}中写入元素,元素中间为逗号分开。
②表示用array函数构造数组。

向数组中写入数据

  1. 直接写入
Sub 向数组中指定的位置写入数据()
Dim arr(1 To 10)
arr(3) = "一"
arr(5) = "周"
arr(7) = "大"
arr(9) = "佬"
End Sub

按F8逐步运行后看到本地窗口中数组中空值的变化。


ExcelVBA——数组(1)_第5张图片
image.png
  1. 循环写入
    ExcelVBA——数组(1)_第6张图片
    image.png
Sub 循环向数组中写入数据()
Dim arr(1 To 4)
For Each Rng In [a1:a4]
    n = n + 1
    arr(n) = Rng
Next
End Sub

设置断点或者F8逐步运行后看到将单元格的值循环写入数组。

ExcelVBA——数组(1)_第7张图片
image.png
  1. 单元格批量写入
Sub 单元格区域数据批量写入数组()
arr = [a1:a4])
End Sub
ExcelVBA——数组(1)_第8张图片
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

你可能感兴趣的:(ExcelVBA——数组(1))