别再傻傻的只会用CTRL+F来查找了,VBA实现查找功能,按需自定义,功能更强大!

文摘   2024-11-06 20:00   上海  




欢迎转发和点一下“看”,文末留言互动!

置顶公众号或设为星标及时接收更新不迷路





小伙伴们好,今天来和大家分享一道VBA的操作技巧。EXCELer们都知道,如果我们想要在工作表或工作簿中查找一项内容,最简单的方法就是利用自带的查找功能—CTRL+F,然后输入查找值,确定查找范围以及其它的一些限定条件后,很轻松地就可以找到相应的内容了。




现在学习了VBA,那么如何在VBA中实现这一个功能呢?今天,就来带大家实际操作一下,如何利用VBA来实现查找功能。




这是一份发票清单,我们要利用VBA查找所有的“CNY”并对其上色。同时设置整个使用区域的边框。效果如下图。





01

录制宏


工作表中的绝大多数操作,都可以录制宏,得到一段代码。下面就来录制一段查找代码。





确定后正常操作查找“CNY”的过程。操作结束后记得停止录制。



录制完成后得到下面这样一段代码。



这就是利用录制功能得到的一段最简单、最基础的实现查找功能的代码。接下来我们就要在这段代码的基础上加以完善,实现题目的要求。


02

代码完善





完整代码如下:

Sub 宏1()    Dim rng As Range, s As String, c, firstaddress    s = InputBox("请输入要查找的内容")    Set c = Cells.Find(What:=s, After:=[A1])    If c Is Nothing Then        MsgBox ("没有找到")        Exit Sub    End If    firstaddress = c.Address    Do        c.Interior.Color = 49407        Set c = Cells.FindNext(c)    Loop While Not c Is Nothing And firstaddress <> c.Address    Set rng = Sheet1.UsedRange    rng.Select        rng.Borders(xlDiagonalDown).LineStyle = xlNone        rng.Borders(xlDiagonalUp).LineStyle = xlNone        rng.Borders(xlEdgeLeft).LineStyle = xlContinuous        rng.Borders(xlEdgeTop).LineStyle = xlContinuous        rng.Borders(xlEdgeBottom).LineStyle = xlContinuous        rng.Borders(xlEdgeRight).LineStyle = xlContinuous        rng.Borders(xlInsideVertical).LineStyle = xlContinuous        rng.Borders(xlInsideHorizontal).LineStyle = xlContinuousEnd Sub

录制得到的那一整串代码可以整理成下面这一段。

Cells.Find(What:="CNY", After:=ActiveCell).Activate

Cells表示在整个工作表内查找。

Find方法的第一个参数What:="CNY"表示查找什么,这里可以给它一个变量,使得查找功能更加灵活。

Find方法的第二个参数After:=ActiveCell表示从哪里开始找。可以设定为一个固定值,比如说单元格A1

因此这部分可以写成下面这样

s = InputBox("请输入要查找的内容")

定义变量s,利用Inputbox来输入需要查找的内容。.

Set c = Cells.Find(What:=s, After:=[A1])

定义对象变量c,令c为查找到的第一个单元格

If c Is Nothing Then    MsgBox ("没有找到")    Exit SubEnd If

如果Inputbox中输入的内容没有查找到,此时变量c就是一个空值,则利用Msgbox返回消息“没有找到”并退出sub过程。

firstaddress = c.AddressDo    c.Interior.Color = 49407    Set c = Cells.FindNext(c)Loop While Not c Is Nothing And firstaddress <> c.Address

Inputbox中输入的内容可以找到时,则令变量firstaddress等于找到的第一个单元格的地址。

接下来开始循环过程,对找到的单元格上色,并查找下一个相同内容的单元格。

c.Interior.Color = 49407可以依靠录制得到代码

Set c = Cells.FindNext(c)这是查找下一个单元格,利用了FindNext方法。

Not c Is Nothing And firstaddress <> c.Address是循环条件,当不满足时就结束循环。

到此为止,查找重复的单元格并上色的操作已经完成了。下面要开始边框设置了。

Set rng = Sheet1.UsedRange

令变量rng为已使用区域

rng.Select

选择该区域

rng.Borders(xlDiagonalDown).LineStyle = xlNone
rng.Borders(xlDiagonalUp).LineStyle = xlNone
rng.Borders(xlEdgeLeft).LineStyle = xlContinuous
rng.Borders(xlEdgeTop).LineStyle = xlContinuous
rng.Borders(xlEdgeBottom).LineStyle = xlContinuous
rng.Borders(xlEdgeRight).LineStyle = xlContinuous
rng.Borders(xlInsideVertical).LineStyle = xlContinuous
rng.Borders(xlInsideHorizontal).LineStyle = xlContinuous

边框设置。这部分也是通过录制宏来得到的。过程这里就不重复了。录制的宏中使用了大量的with语句,看起来比较复杂。实际上我们只需要将最有用的语句摘录出来就可以了。


本期内容练习文件提取方式:

接: https://pan.baidu.com/s/1auAry1X2p91LqmIRJwSr0w?pwd=b25x 提取码: b25x 


好了朋友们,今天和大家分享的内容就是这些了!喜欢我的文章请分享、转发、点赞和收藏吧!如有任何问题可以随时私信我哦!


-END-


长按下方二维码关注EXCEL应用之家

面对EXCEL操作问题时不再迷茫无助


我就知道你“在看”


推荐阅读

Excel应用之家
介绍、交流EXCEL各项功能在工作中的实际应用; 为你答疑解惑;分享各类图表、表格和模板;提供有偿代工服务。
 最新文章