以前章节中我们讲到过利用宏来实现查询功能: 尽管数据只有一点点,运行时还是有点卡,今天我们已经完全有能力自己写代码完成这个功能了。 案例: 如上,通过办事处来查询对应的姓名和销量。 思路如下:把三列数据写入数组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
|
|