|
三、数组的空间
1.数组的大小
数组是用编号排序的,那么如何获得一个数组的大小呢
Lbound(数组) 可以获取数组的最小下标(编号)
Ubound(数组) 可以获取数组的最大上标(编号)
Ubound(数组,1) 可以获得数组的行方面(第1维)最大上标
Ubound(数组,2) 可以获得数组的列方向(第2维)的最大上标- Sub d6()
- Dim arr
- Dim k, m
- arr = Range("a2:d5")
- For x = 1 To UBound(arr, 1)
- Next x
- End Sub
复制代码 2.动态数组的动态扩充
如果一个数组无法或不方便计算出总的大小,而在一些特殊情况下又不允许有空位。这时我们就需要用动态的导入方法
ReDim Preserve arr() 可以声明一个动态大小的数组,而且可以保留原来的数值,就相当于厂房小了,可以改扩建增大,但是它只能'让最未维实现动态。如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。- Sub d7()
- Dim arr, arr1()
- arr = Range("a1:d6")
- Dim x, k
- For x = 1 To UBound(arr)
- If arr(x, 1) = "B" Then
- k = k + 1
- ReDim Preserve arr1(1 To 4, 1 To k)
- arr1(1, k) = arr(x, 1)
- arr1(2, k) = arr(x, 2)
- arr1(3, k) = arr(x, 3)
- arr1(4, k) = arr(x, 4)
- End If
- Next x
- Range("a8").Resize(k, 4) = Application.Transpose(arr1)
- End Sub
复制代码 3. 清空数组
清空数组使用earse语句重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。
Erase 根据是固定大小(常规的)数组还是动态数组,来采取完全不同的行为。Erase 无需为固定大小的数组恢复内存。Erase 按下表来设置固定数组的元素:
数组类型 Erase 对固定数组元素的影响
固定数值数组 将每个元素设为 0。
固定字符串数组(长度可变) 将每个元素设为零长度字符串 ("")。
固定字符串数组(长度固定) 将每个元素设为 0。
固定 Variant 数组 将每个元素设为 Empty。
用户定义类型的数组 将每个元素作为单独的变量来设置。
对象数组 将每个元素设为特定值 Nothing。
Erase 释放动态数组所使用的内存。在下次引用该动态数组之前,程序必须使用 ReDim 语句来重新定义该数组变量的维数。- Sub d9()
- Dim arr, arr1(1 To 1000, 1 To 1)
- Dim x, m, k
- arr = Range("a1:a16")
- For x = 1 To UBound(arr)
- If arr(x, 1) <> "" Then
- k = k + 1
- arr1(k, 1) = arr(x, 1)
- Else
- m = m + 1
- Range("c1").Offset(0, m).Resize(k) = arr1
- Erase arr1
- k = 0
- End If
- Next x
- End Sub
复制代码 |
|