本例是一个跨工作表的多条件模糊的查询案例。
源数据如下:
![34e1919116f8c35b06f97b57a1936270.png](https://i-blog.csdnimg.cn/blog_migrate/99e5ed6f692d0d4fb07962ebb3ac0589.jpeg)
目标工作簿及内容:
![af293b74efa5249ab090b9f78e4199b1.png](https://i-blog.csdnimg.cn/blog_migrate/6edd4e31aae23ac33e75a8deb3ed17ea.jpeg)
问题描述:
1:源数据,在名为“进价”的工作表内;
2:目标数据,即查询的结构显示工作表,在名为“查询”的工作表内;
3:按照C2、C3 单元格的查询条件,查询出相应的数据;
解决的思路详解:
1:把“进价”的工作表的数据,放入arr数组;
2:用for循环遍历数组;
3:用if判断是否满足查询的条件;
4:把满足条件的数据,放入数组brr;
5:最后在指定的单元格区域内,放入brr;
代码运行的结果如下:
![5cecb20316fb35cc84d63e9d6ef24921.gif](https://i-blog.csdnimg.cn/blog_migrate/04b12a5dfb3e6d768897e78a6291a453.gif)
代码如下:
![6c8b1c7500244f853e2c188f73a2609a.png](https://i-blog.csdnimg.cn/blog_migrate/63be8514db0b02d37aedde2df8573756.jpeg)
Sub test() Dim r%, i% Dim arr, brr With Worksheets("查询") If .Range("c2") = "" Or .Range("c3") = "" Then MsgBox "查询条件不能为空!" Exit Sub End If tj1 = .Range("c2") tj2 = .Range("c3") End With With Worksheets("进价") r = .Cells(.Rows.Count, 1).End(xlUp).Row arr = .Range("a3:k" & r) ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2)) For i = 1 To UBound(arr) If arr(i, 3) = tj1 And arr(i, 4) Like tj2 & "*" Then m = m + 1 For j = 1 To UBound(arr, 2) brr(m, j) = arr(i, j) Next End If Next End With If m = 0 Then MsgBox "没有查询到符合条件数据!" Exit Sub End If With Worksheets("查询") .UsedRange.Offset(5, 0).ClearContents .Range("a6").Resize(UBound(brr), UBound(brr, 2)) = brr End WithEnd Sub
代码解析
1:2~3行 定义变量;
2:4~8行 判断查询条件是否为空;
3:9~10行 查询条件赋值;
4:13行 获取“进价”工作表的最后一行行号;
5:14行 把查询数据的数据源区域放入arr数组;
6:15行 定义一个与arr区域或者说大小一样的brr数组;
7:16~23行 遍历arr数组;
8:17行 判断相应的条件是否符合查询条件(注意用了like进行了模糊的匹配);
9:18行 计算器m;
10:20行 把查询的结果,从arr数组赋值到brr数组;
11:25~27行 如果计数器的结果为0 ,则弹出对话框,没有"没有查询到符合条件数据!";
12:30行 清空指定区域的格式;
13:31行 把brr数组,赋值给指定的区域;
本例思考:
1:本例利用了Like运算符,使查询的运用范围,更加的广泛。
小结:
解决本问题,需要用的知识点:
1:Like运算符
延伸阅读:
Excel VBA 工作表的四种引用方法
Excel VBA 跨工作表模糊查找