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 Ranges = 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

(0)

相关推荐