Excel VBA 8.48如何获取单元格内容最后一次出现的记录
模糊查询的高阶玩法 数组完胜单元格遍历
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
获取数据最后一次出现的需求,其实在我们日常工作中应该是比较常见的
比方说有时候我们为了记录某个员工历次的销售业绩,我们会将每次的销售数据都保存下来,这样我们就可以分析员工的销售水平的变动,方便监督员工不断提升自己的销售水平,但是这样又有一个弊端,那就是在我们最后计算业绩的时候,需要从一大堆数据中找出这个员工最后一次的数据,就非常的耗时了,那么针对这样的情况,我们要如何来处理呢?
场景说明
比方说我们稍微更改下上一节的数据源,这里其实我们班上只有那么几位同学,但是我们这份表中,记录了他们每一次周考的成绩,现在马上就要临近大考了,我们希望知道学生最后一次考试的成绩是多少,从一大堆数据中去找,确实是比较困难的。
相信这类问题,大家在之前百度的时候,一定会看到网上有很多种不同的方法,我们既然在学习VBA,就直接用VBA来实现,更好理解, 也更好用。
代码区
Sub test()
Dim rng As Range, trng As Range, frng$, a As Range
s = Application.InputBox("查找内容的确定", "请输入查找内容", , , , , , 3)
With ActiveSheet.UsedRange
Set rng = .Find(s, searchdirection:=xlPrevious)
rng.Select
End With
End Sub
清晰简短的代码
相较于网上所提供的的各种方法,又是函数,又是辅助列的,VBA代码明显简单了很多
直接来看看效果
非常的简单快捷
代码解析
看到代码,大家都应该知道我用的是什么方法了吧
还是我们之前学习过的range.find方法
不过今天的参数有点不一样,我们来重点看看
Set rng = .Find(s, searchdirection:=xlPrevious)'今天的代码
Set rng = .Find(s)'之前的代码
我们这里将之前的代码和今天的代码放在一起,大家可以对照着来看
我们会发现相较于之前的代码,今天的代码仅仅是多了一部分,那一部分呢?
searchdirection:=xlPrevious
那这一部分代码有什么用处呢?
他其实就是用来说明find查找的方向的。
SearchDirection 可选参数,只要用来指明find查找的方向
他有两种不同的表达方式,xlNext(向后,默认值),xlprevious(向前)
比方说我们今天的场景
searchdirection:=xlprevious,意思是从后往前找,找到结果就算是程序结果了。
这也是为什么相同数据,昨天用range,find用了12s,但是今天是秒出结果
因为我们指明了方向,是从数据源的最后面开始查找,找到结果就暂停了,那么这样一来数据量就很小了
小小的find的方法,居然还有这么好的隐藏技能,大家今天get到了吗?
不知道还有没有什么其他隐藏的小技能呢?
欢迎大家踊跃留言~~~