分享

VBA数组空间

 先生草堂 2016-12-02


'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

Sub d8()

Dim arr, arr1(1 To 100000, 1 To 4)

arr = Range('a1:d6')

Dim x, k

For x = 1 To UBound(arr)

If arr(x, 1) = 'B' Then

k = k + 1

arr1(k, 1) = arr(x, 1)

arr1(k, 2) = arr(x, 2)

arr1(k, 3) = arr(x, 3)

arr1(k, 4) = arr(x, 4)

End If

Next x

Range('a15').Resize(k, 4) = arr1

End Sub

'3 清空数组

'清空数组使用earse语句

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



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约