Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2037|回复: 0

跟着校长学VBA之第22集:VBA数组3

[复制链接]
发表于 2013-1-13 22:00 | 显示全部楼层 |阅读模式
三、数组的空间
1.数组的大小
数组是用编号排序的,那么如何获得一个数组的大小呢
Lbound(数组) 可以获取数组的最小下标(编号)
Ubound(数组) 可以获取数组的最大上标(编号)
Ubound(数组,1) 可以获得数组的行方面(第1维)最大上标
Ubound(数组,2) 可以获得数组的列方向(第2维)的最大上标
  1. Sub d6()
  2.     Dim arr
  3.     Dim k, m
  4.     arr = Range("a2:d5")
  5.     For x = 1 To UBound(arr, 1)

  6.     Next x
  7. End Sub
复制代码
2.动态数组的动态扩充
如果一个数组无法或不方便计算出总的大小,而在一些特殊情况下又不允许有空位。这时我们就需要用动态的导入方法
ReDim Preserve arr() 可以声明一个动态大小的数组,而且可以保留原来的数值,就相当于厂房小了,可以改扩建增大,但是它只能'让最未维实现动态。如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。
  1. Sub d7()
  2.     Dim arr, arr1()
  3.     arr = Range("a1:d6")
  4.     Dim x, k
  5.     For x = 1 To UBound(arr)
  6.         If arr(x, 1) = "B" Then
  7.             k = k + 1
  8.             ReDim Preserve arr1(1 To 4, 1 To k)
  9.             arr1(1, k) = arr(x, 1)
  10.             arr1(2, k) = arr(x, 2)
  11.             arr1(3, k) = arr(x, 3)
  12.             arr1(4, k) = arr(x, 4)
  13.         End If
  14.     Next x
  15.     Range("a8").Resize(k, 4) = Application.Transpose(arr1)
  16. End Sub
复制代码
3. 清空数组
清空数组使用earse语句重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。
Erase 根据是固定大小(常规的)数组还是动态数组,来采取完全不同的行为。Erase 无需为固定大小的数组恢复内存。Erase 按下表来设置固定数组的元素:
数组类型                         Erase                           对固定数组元素的影响
固定数值数组                                                     将每个元素设为 0。
固定字符串数组(长度可变)            将每个元素设为零长度字符串 ("")。
固定字符串数组(长度固定)            将每个元素设为 0。
固定 Variant 数组                                       将每个元素设为 Empty。
用户定义类型的数组                                  将每个元素作为单独的变量来设置。
对象数组                                                            将每个元素设为特定值 Nothing。

Erase 释放动态数组所使用的内存。在下次引用该动态数组之前,程序必须使用 ReDim 语句来重新定义该数组变量的维数。
  1. Sub d9()
  2.     Dim arr, arr1(1 To 1000, 1 To 1)
  3.     Dim x, m, k
  4.     arr = Range("a1:a16")
  5.     For x = 1 To UBound(arr)
  6.         If arr(x, 1) <> "" Then
  7.             k = k + 1
  8.             arr1(k, 1) = arr(x, 1)
  9.         Else
  10.             m = m + 1
  11.             Range("c1").Offset(0, m).Resize(k) = arr1
  12.             Erase arr1
  13.             k = 0
  14.         End If
  15.     Next x
  16. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-9-21 10:03 , Processed in 0.218187 second(s), 3 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表