在工作中经常会用到一种批量查询的情况,这种情况比较复杂,就是查询需要在不同的工作表中进行,这种情况是如何快速查到结果呢?在GO语言中有个函数RANGE(),可以遍历数组,切片,MAP,那么如何在EXCEL中实现此功能呢?是否有种方法可以在多个工作表中查询数据呢?有办法的,利用VBA.可以使这类的批量查询迎刃而解。 首先上代码:(拷贝时最好要去掉前面的行号,此行号是位后面的解释代码方便而设置的)。 1 Sub KK() 2 Sheets('SHEET1').Select 3 I = 2 4 Do While Cells(I, 1) <> '' 5 Cells(I, 1).Select 6 TT = Cells(I, 1) 7 Cells(I, 2) = '' 8 9 Set FJX =Sheets('A').Range('A1:A' &Sheets('A').Range('A1').End(xlDown).Row).Find(TT,AFTER:=[A1], LOOKAT:=xlWhole) 10 If Not FJXIs Nothing Then Cells(I, 2) = Sheets('A').Cells(FJX.Row, 2) 11 12 Set FJX =Sheets('B').Range('A1:A' &Sheets('A').Range('A1').End(xlDown).Row).Find(TT, AFTER:=[A1],LOOKAT:=xlWhole) 13 If Not FJX Is Nothing Then Cells(I, 2) =Sheets('B').Cells(FJX.Row, 2) 14 15 Set FJX =Sheets('C').Range('A1:A' &Sheets('C').Range('A1').End(xlDown).Row).Find(TT, AFTER:=[A1], LOOKAT:=xlWhole) 16 If Not FJX Is Nothing Then Cells(I, 2) =Sheets('C').Cells(FJX.Row, 2) 17 18 Set FJX =Sheets('D').Range('A1:A' & Sheets('D').Range('A1').End(xlDown).Row).Find(TT,AFTER:=[A1], LOOKAT:=xlWhole) 19 If Not FJX Is Nothing Then Cells(I, 2) =Sheets('D').Cells(FJX.Row, 2) 20 I = I 1 21 Set FJX = Nothing 22 Loop 23 End Sub
代码的截屏:
代码的解释: 首先用到一个DO WHILE循环,将批量查询的数据的值一个一个的赋给“TT”(第6行). 在9行首先在工作表“A”中查询;注意此处用到之前文章中发表的《VBA 实战技巧篇:如何对不固定的连续区域进行选择》,不清楚的朋友请参考. 如果没有查到则在第12行,实现在工作表“B”中查询; 如果还没有则在16行,实现在工作表“C”中查询; 还没有则在18行,实现在工作表“D”中查询。当查询到结果后,会把对应的值写道工作表sheet1的“B”列。上述就实现了批量数据的多工作表查询方法。 下面就视频演示一下此方法: 包括: 1 建立宏模块 2在VBA编译器中拷贝代码 3 建立按钮连接宏 4查询演示 |
|