在工作中经常会用到一种批量查询的情况,这种情况比较复杂,就是查询需要在不同的工作表中进行,这种情况是如何快速查到结果呢?在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 FJX Is 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”中查询;
如果还没有则在15行,实现在工作表“C”中查询;
还没有则在18行,实现在工作表“D”中查询。当查询到结果后,会把对应的值写道工作表sheet1的“B”列。上述就实现了批量数据的多工作表查询方法。
下面就视频演示一下此方法:
包括:
1 建立宏模块
2在VBA编译器中拷贝代码
3 建立按钮连接宏
4查询演示
领取专属 10元无门槛券
私享最新 技术干货