Excel VBA 8.49普通查询不能实现的倒序查询 VBA还能玩出新花样
带条件的倒序查询 VBA还是一样破
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
上一节我们学习了如何用VBA来实现倒序查找,最后一个单元格的位置其实也就是倒序
通过倒序查询,我们可以获得某文本最后一次出现的单元格位置,非常方便用来获取数据最后一次出现的位置
用这个方法能够快速的获取重复数据的最新坐标
但是有时候,我们并不仅仅是要获得最后一次出现的数据位置,同时还是有条件的倒序查询,因为不同条件获得的结果代表的意义是完全不同的 倒序查询本身就已经超出了普通CTRL+F的范畴了,现在还要增加条件!不方,一样可以实现!
场景说明
这是我们今天模拟的数据源,这里记录的的是某个班级,在最近的三次模拟考试中,每个同学的考试成绩排名
那么今天我们要获得是的A20这个同学的考试成绩
要求是:获得A20最后一次的模拟考试排名,以判断他距离自己理想目标还有多大的差距
代码区
Sub test2()
Dim rng As Range, trng As Range, frng$, a As Range
s = Application.InputBox("查找内容的确定", "请输入查找内容", , , , , , 3)
With ActiveSheet.UsedRange
Set rng = .Find(s, searchdirection:=xlPrevious, searchorder:=xlByColumns)
rng.Select
num = rng.Offset(0, -3)
Cells(5, "i") = s
Cells(5, "j") = num
Cells(4, "j") = "最后一次排名"
End With
End Sub
我们直接来看看代码运行的效果, 为了和上节的代码结果形成一个对比,我们先用上节的代码来运行下,看看结果,并标记为红色
上一节的代码查询的结果,被我们标记为红色,然后今天的新的查询结果标记为黄色,明显看出来,两次的结果是不同的,
代码解析
为什么同样是倒序查找,而两次查询的结果是完全不同的结果呢?
这里就牵涉 range.find的另外一个属性,就是搜索方向,常规来说,搜获都是按照行进行查询的
所以常规的倒序查询,第一个找到的结果就是排名11的A20,因为也可以理解是A20成绩最差的一次,因为他是从后面数,第一次出现的,所以他被第一个选中了。
但是我们今天要查询的是专门针对第三次模拟,也就是最后一次模拟考试来查询的,看看A20最终努力的成果的,那么我们只需要案列倒序查询
那么是如何实现这个按列来查询的呢?看代码
Set rng = .Find(s, searchdirection:=xlPrevious, searchorder:=xlByColumns)
searchorder:=xlByColumns就是实现单列查询的
searchorder主要是设置查询的方向的,他和searchdirection一样,也有两个选项。
xlbyrows:按行查找,一行行的查找
xlbycolumns:按列,一列列的查找
常规情况下,默认是按行来查询的。所以searchorder:=xlbyrows一般都是忽略的
在今天这个特殊情况下,我们就是按列来查询,所以就是searchorder:=xlByColumns