VBA入门到进阶常用知识代码总结22

第22集 VBA数组-3:数组的空间
97、 数组的角标(索引)
Lbound(数组) 可以获取数组的最小下标(编号)
Ubound(数组) 可以获取数组的最大上标(编号)
Sub arrjiaobiao()
Dim arr, i, j
arr = Array(1, 2, 3, 4, “A”, “B”)
i = LBound(arr) 'i=0
j = UBound(arr) 'j=5
End Sub
Ubound(数组,1) 或Ubound(数组) 可以获得数组的行方面(第1维)最大上标,1可省略
Ubound(数组,2) 可以获得数组的列方向(第2维)的最大上标
Sub d6()
Dim arr
Dim k, i, j, x
arr = Range(“a2:d6”) '5行4列二维数组
i = UBound(arr, 1) 'i=5
j = UBound(arr, 2) 'j=4
For x = 1 To UBound(arr, 1) '程序中一般这样写

Next x
End Sub
98、 动态数组的动态扩充
如果一个数组无法或不方便计算出总的大小,而在一些特殊情况下又不允许有空位。这时我们就需要用动态的导入方法。
ReDim Preserve arr() 可以声明一个动态大小的数组,而且可以保留原来的数值,相当于在原数组最后新加元素,但是它只能让最末维实现动态,如果是一维不存在最末维。
Private Sub ComboBox1_GotFocus()
Dim arr(), x, arr1, k
arr1 = Range(“a1:a10”) 'arr1变为10行1列的二维数组
For x = 1 To UBound(arr1)
If arr1(x, 1) > 10 Then
k = k + 1
ReDim Preserve arr(1 To k)
arr(k) = arr1(x, 1)
End If
Next x
ComboBox1.List = arr
End Sub

Sub d7()
Dim arr, arr1()
arr = Range(“a1:d6”) '6行4列二维数组
Dim x, k
For x = 1 To UBound(arr) 'x从1循环到6,UBound(arr,1)也可以
If arr(x, 1) = “B” Then
k = k + 1
ReDim Preserve arr1(1 To 4, 1 To k) '本例ReDim Preserve只能实现最末维(第2维)的动态大小,所以arr1先按列排
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
99、 清空数组
使用Erase可以清空数组内容。
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

发布了47 篇原创文章 · 获赞 0 · 访问量 229

猜你喜欢

转载自blog.csdn.net/tiansdk320/article/details/104351246