以前章节中我们讲到过利用宏来实现查询功能:
尽管数据只有一点点,运行时还是有点卡,今天我们已经完全有能力自己写代码完成这个功能了。
案例:
如上,通过办事处来查询对应的姓名和销量。
思路如下:把三列数据写入数组arr1,该数组中如果办事处等于g3中的值,把arr1中第二列和第三列的值写入一个新的数组arr2,最后以f5为起点,重新选择一个和arr2规格相同的区域,把arr2放进去。
在写代码之前我们来学习VBA中的两个函数。
ubound:获取数组的最大下标
lbound: 获取数组的最小下标
比如:
ubound/lbound中第二个参数,表示第几个维度,不写或写1表示返回第一个维度的最大或者最小下标。
还记得我们在前面章节中,用for next 循环时,to后面的值要通过对一列中的非空单元格行数进行计数,现在有了这个函数,那就很好实现了。
上面案例中的代码如下:
Sub 筛选()
Dim arr1, arr2, ts%, i%, n%
Range('f5:g16').ClearContents
arr1 = 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 If
Next
[f5].Resize(ts, 2) = arr2
End Sub
ubound在以后的实例中会经常用得到。
联系客服