我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!
通过前面几节的介绍,我们对数组已经有了初步的认识,知道了数组的维度,数组的下标,那实际应用中是如何利用数组的下标的呢?
来看看下面的案例
案例:
如上,通过办事处来查询对应的姓名和销量。
思路一:
循环A列办事处区域中的每一个单元格,循环出来后判断其值是否与G3中输入的值相等,如果相等,把该条数据复制到查询结果中去。
思路二:
以前我们讲过,在数组中循环元素要比直接在区域中循环单元格速度快,所以我们先把A列办事处的数据区域读取到数组中,在数组中循环出代表办事处的元素,然后进行判断,判断方法和思路一差不多。
比如上面的案例,我们把A2:C16读取到数组arr中,那么arr为 arr(1 to 15,1 to 3)。
arr(1,1),arr(2,1),arr(3,1),arr(4,1),……表示办事处,可以理解为第n行第1列的值。
arr(1,2),arr(2,2),arr(3,2),arr(4,2),……表示姓名,可以理解为第n行第2列的值。
arr(1,3),arr(2,3),arr(3,3),arr(4,3),……表示销量,可以理解为第n行第3列的值。
假如数据条数是不断增加的,数组中的元素也就会自动增加,要在数组里循环出每行第1列的值,这个行数是动态的,循环时到底该写 1 to 多少呢?
解决上面问题之前,我们先来学习下VBA中获取数组下标上界和下界的两个函数。
Ubound:获取数组的最大下标
Lbound: 获取数组的最小下标
比如:
Ubound/Lbound中第二个参数,表示第几个维度,不写或写1表示返回第一个维度的最大或者最小下标。
上面案例中的代码如下:
Sub 筛选()Dim arr1, arr2, ts%, i%, n%Range("f5:g16").ClearContentsarr1 = Range("a2", [c2].End(xlDown))ts = Application.CountIf([a:a], [g3])ReDim arr2(1 To ts, 1 To 2)For i = 1 To UBound(arr1) If arr1(i, 1) = [g3].Value Then n = n + 1 arr2(n, 1) = arr1(i, 2) arr2(n, 2) = arr1(i, 3) End IfNext[f5].Resize(ts, 2) = arr2End Sub
向右滑动可以查看完整代码。
通常情况下,在数组中循环时,我们经常会用UBound来获取数组的最大下标。
知识点:
1、对数组维度,每个维度下标的上界、下界的理解。
2、获取数组下标最小、最大编号的函数。
本节的分享就到这里,鹏哥祝大家每天都有进步。