新金瓶梅

就去色妹妹 怎样使用VBA代码杀青Excel的查找和替换功能?
你的位置:新金瓶梅 > 丝袜美腿 亚洲色图 > 就去色妹妹 怎样使用VBA代码杀青Excel的查找和替换功能?
就去色妹妹 怎样使用VBA代码杀青Excel的查找和替换功能?
发布日期:2025-06-28 14:46    点击次数:182

就去色妹妹 怎样使用VBA代码杀青Excel的查找和替换功能?

就去色妹妹 每天一篇Excel技巧图文微信公众号:Excel星球NO.145-I Find You作家:看见星光 微博:EXCELers / 常识星球:Excel

HI,各人好,我是星光。这章连续给各人共享VBA常用对象之单位格的编程妙技。天然莫得自古以来,但也曾无人不晓的是就去色妹妹,在Excel中有一个很常用的功能:查找与替换。而在VBA编程中也有与之对应的两个设施:Find和Replace。

我们先来聊Find,比较于Replace它更常用。

1 丨

基本语法

Find是单位格对象的设施,默许在指定的区域中查找包含某个数据的单位格。若找到适合条目的数据,则复返包含该数据的单位格;若未找到适合条目的,则复返Nothing。

语法时局如下▼

<单位格对象>.Find (What,[After],[LookIn],[LookAt],[SearchOrder],[SearchDirection],[MatchCase],[MatchByte],[SearchFormat])

语法看的一脸懵逼?齐是洋文惹的锅!其实,以上参数基本对应了查找对话框中的各个选项。

图片

我来给您翻译一下:

<单位格对象>.Find (查找值,[查找脱手位置],[查找范围的类型],[匹配神志十足匹配照旧部分匹配],[查找神志行或列],[查找方上前或后],[是否永诀大小写],[全角或半角],[查找单位格的时局])

照旧一脸懵?打个响指,语法中带中括号的部分齐是可选的,是以我再给你简化一下,只保留最常用的两个参数。

<单位格对象>.Find (查找值,[匹配神志是十足匹配照旧部分匹配])

这么是不是就很浅显了?

送佛送到西,不论男女,齐抱你上花轿,我再给你举个例子。

图片

以上图所示的数据表为例,查找是否存在字段名'语文'。要是存在,则弹窗显现行号和列标;要是不存在,则显现查无此货。

示例代码如下:

代码看不全不错傍边拖动..▼

Sub rngFind() Dim rng As Range '界说一个单位格对象 Set rng = Cells.Find(what:='语文', lookat:=xlWhole) If rng Is Nothing Then MsgBox '查无此货' Else MsgBox '行:' & rng.Row & ' 列:' & rng.Column End IfEnd Sub

代码瓦解▼

第2行代码界说一个变量rng,类型为单位格对象。

第3行代码使用Find设施在刻下使命表整个区域中查找字符串'语文',匹配神志为举座匹配(xlWhole),并将查询效果赋值给变量rng。

第4行至第8行代码判断rng是否为Nothing。要是条目建设,则施展查无效果;要是条目不建设,则复返查找效果的行号和列标。

本例复返效果如下:

图片

2 丨

污秽匹配查询

Find设施和Excel「查找替换」一样,也复旧污秽匹配。杀青的神志有两种,将匹配神志lookat成立为xlPart,无意在查找值使用通配符。也曾以上节所示的数据表为例,如需查找东说念主名中包含'星光'的语文得益,不错使用以下代码。代码1,xlPart设施..▼
Sub rngFindPart()    Dim rng As Range '界说一个单位格对象    Set rng = Cells.Find(what:='星光', lookat:=xlPart) '部分匹配    If rng Is Nothing Then '要是查无效果...        MsgBox '查无此货'    Else '要是查有用果,则向右偏移1位取值        MsgBox rng.Value & '语文得益是:' & _            rng.Offset(0, 1).Value    End IfEnd Sub

第3行代码成立匹配神志为部分匹配,要是查有用果,第7行代码使用Offset语句,将效果单位格向右偏移一个单位格获得语文得益。

代码运行后,复返效果如下:

图片

代码2,通配符设施..▼

Sub rngFindWildcard() Dim rng As Range '界说一个单位格对象    Set rng = Cells.Find(what:='*星光*', lookat:=xlWhole) '查找值使用了通配符* If rng Is Nothing Then MsgBox '查无此货' Else MsgBox rng.Value & '语文得益是:' & _ rng.Offset(0, 1).Value End IfEnd Sub

第3行代码将Find语句的查找值成立为*星光*,星号看成通配符,不错代表自便个字符,因此该查找值的好奇艳羡即是包含星光的字符串。

……

比较于xlPart设施,通配符要更机动一些,它不但能抒发包含干系,也能抒发以某个字符脱手或为止的查找值,色哥网比如看见*,抒发了以看见两个字为起原的数据。*星光,则抒发了以星光两个字为止的数据。

除此之外,还有一个通配符问号?,一个问号只代表一个字符。比如,要是我们需要查找由4个字符组成的数据,查找值不错成立为????

……

3 丨

查找使命表

终末数据场地的行号

在本系列教程第20课「什么是单位格对象」,我们共享了多种抒发数据列表终末一滑的设施,如下▼

Sub LastRow()    Debug.Print ActiveSheet.UsedRange.Rows.Count    Debug.Print Range('a1').CurrentRegion.Rows.Count    Debug.Print Cells(Rows.Count, 'a').End(xlUp).RowEnd Sub

其时也有给各人讲了这3种设施各自的优裂缝;一个倒霉的情况是:在莫得特殊成立的前提下,它们齐不可准确的抒发数据列表终末一滑的位置。

图片

以上图所示的数据为例,数据的终末一滑行号应为10;但以上代码复返的效果分别为13(UsedRange)、8(CurrentRegion)、8(End)。至于原因,那一章我们讲过了,这里就不再重叠。

使用Find设施不错惩办这个问题。代码如下▼

Sub FindLastRow() Dim rng As Range Set rng = Cells.Find('*', _ LookIn:=xlFormulas, SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious) If rng Is Nothing Then MsgBox '空表,深广据' Else MsgBox '终末一滑是:' & rng.EntireRow.Row End IfEnd Sub

第3行代码成立查找值为通配符为*,代表自便字符;查找范围的类型为公式,查找神志为行,查找标的是上前。运行以上代码复返效果如下。

图片

上述Find语句的参数成立的有点华贵?摊手,如实如斯,不外大部分情况下,除了查找值之外,其它参数齐是默许值,是不错不详的。

只是以说大部分情况下是因为……Find语句本色上调用的是「查找替换」功能的有关选项成立看成默许参数的。换句话说,要是用户使用过「查找替换」功能,并修改了选项成立,比如将查找查找范围的类型修改为'批注';那么Find设施也就默许使用「查找替换」的属性,只会在'批注'中查找是否有适合效果的数据。

图片

是以,万全之策,照旧淡薄在使用Find语句时将有关参数成立竣工……这不错通过录制宏来获得,并不需要强行挂念。「查找替换」功能的选项成立会影响Find设施,反过来,Find设施也会影响「查找替换」功能的选项成立。比如,我们使用Find语句成立了查找值、匹配神志等,当你再次开放Excel的「查找替换」功能,就会发现有关选项也被修改了。你不错像我一样帅不自知,但不可像我一样掉坑而不自知;是以,以上,几许照旧需要钟情一下滴。看个告白休息一下莫得告白的微信文是不至意的▼

4 丨

查找适合条目的通盘效果

我们上头讲的齐是查找一个效果的情况,要是需要查找的效果有多个,也即是时常说的一双多查询,又该若那儿理呢?Find设施并不领有「查找与替换」功能里【查找通盘】的智商——不错使用FindNext语句。我举个例子。

图片

如上图所示,是一张长相喜东说念主的得益表,称号为'详尽得益表',目下需要查询'看见星光'总共的考验得益明细,查询效果如下。

图片

示例代码如下:

代码看不全不错傍边拖动..▼

Sub DoFindNext()    Dim sht As Worksheet, rng As Range    Dim k As Long, strADS As String, s As String    Application.ScreenUpdating = False '取消屏幕刷新    ActiveSheet.UsedRange.Offset(1).ClearContents '保留效果表标题行,清空其它值    s = '看见星光' '查找值    k = 1 '纪录行位置运行为1    Set sht = Worksheets('详尽得益表') '数据表    Set rng = sht.Cells.Find(what:=s, lookat:=xlWhole) '十足匹配查询    If Not rng Is Nothing Then        strADS = rng.Address '要是查有用果,则将单位格地址复制变量strADS        Do            k = k + 1 '计数器            Cells(k, 1) = rng '姓名            Cells(k, 2) = rng.Offset(0, 1) '语文            Cells(k, 3) = rng.Offset(0, 2) '英语            Set rng = sht.Cells.FindNext(rng) '查找下一个            If rng.Address = strADS Then Exit Do '轮回一轮后退出Do轮回体        Loop    End If    Application.ScreenUpdating = True    MsgBox '查询OK'End Sub

代码瓦解:

第4行代码清空刻下使命表除了标题行之外的所荒谬据。

第9行代码使用单位格对象的Find设施,采用十足匹配的神志,在使命表'详尽得益表'中查询'看见星光'。要是查有用果,则在第11行代码复返效果单位格的地址,并赋值给字符串变量strADS.

第13至第16行代码累计效果行数,并把柄查询效果单位格的位置,向右偏移,获得语文和数学得益等信息,写入效果使命表。

第17行代码使用FindNext语句查询下一个指标。

FindNext语句的好奇艳羡是查找下一个指标,语法时局如下。

<单位格对象>.FindNext(After)

它唯唯一个参数,一个指定的单位格,系统将从该单位格之后脱手进行查找。既然是之后,那么脱手查找时,查找的范围就不包含该单位格,唯独当轮回查了一圈,只剩下该单位格了,才会查找它的内容是否适合条目。

把柄这个规定,我们将首个查询效果的地址赋值给变量strADS,然后只须判断FindNext的复返效果是否等于strADS,即可判断系统是否对总共的单位格齐查询过了。要是这个条目建设,则退出Do轮回。

需要留心的是,由于FindNext永久是在指定单位格之后的范围进行查找,是以必须使用上一次所找到效果的单位格看成参数,要是使用一个固定的单位格地址,也就会永久复返一个固定的效果——此时,叮咚,恭喜你,很可能这是你VBA编程生计第一次堕入死轮回。

图片

……

是不是以为FindNext很绕?不大好相连?叮咚,再次恭喜你,其实这语句本色上很少用,惊不惊喜意不料外?——相同的问题,我们更多的时间是使用数组轮回。

数组轮回解法如下。

Sub DoArray()    Dim s As String, k As Long    Dim arr, i As Long, j As Long    Application.ScreenUpdating = False '取消屏幕刷新    ActiveSheet.UsedRange.Offset(1).ClearContents '保留效果表标题行,清空其它值    s = '看见星光' '查找值    k = 1 '纪录行位置运行为1    arr = Worksheets('详尽得益表').UsedRange    For i = 1 To UBound(arr)'遍历行        For j = 1 To UBound(arr, 2) '遍历列,也即是遍历数组中每一个元素            If arr(i, j) = s Then                k = k + 1 '计数器                Cells(k, 1) = s '姓名                Cells(k, 2) = arr(i, j + 1) '语文得益                Cells(k, 3) = arr(i, j + 2) '数学得益            End If        Next    Next    Application.ScreenUpdating = True    MsgBox '查询OK'End Sub

第9行至第18行代码遍历数组中的每一个元素,要是元素等于查找值,则按列偏移获得语文和数学的得益——这念念路是不是比FindNext语句浅显多了?险些是数组无脑轮回的典范!

有位叫李宗盛的苍老说过,有一天,你会知说念,在VBA编程里无脑轮回并不是贬义词~……

图片

……

5 丨

麻豆 夏晴子

Replace语句

终末再给各人讲一下怎样用VBA代码杀青「替换」功能,也即是单位格Replace设施。语法时局如下▼

<单位格对象>.Replace(What、Replacement、LookAt、SearchOrder、MatchCase、MatchByte、SearchFormat、ReplaceFormat)

翻译一下▼

<单位格对象>.Replace(查找值、替换值、匹配神志是十足匹配照旧部分匹配、[查找神志行或列]、是否永诀大小写、全角或半角、按时局搜索、按时局替换)

最常用的唯独前边3个参数,简化后如下。

<单位格对象>.Replace(查找值,替换值,匹配神志:十足匹配照旧部分匹配)

举个例子,将刻下使命表中总共的'看见星光'替换为'看见蟾光'。

代码如下▼

Sub rngReplace() Cells.Replace '看见星光', '看见蟾光', xlWholeEnd Sub

是不是很浅显?

需要留心的是,和Find设施一样,「查找替换」的选项成立也会影响Replace设施,反过来,Replace设施也会影响「查找替换」有关选项成立。比如,以上述代码为例,要是不详了第3参数,则时常默许实践的是部分匹配,毕竟部分匹配是「查找替换」的默许选项。

……

就酱,打完手工,下期相遇。

本站仅提供存储就业,总共内容均由用户发布,如发现存害或侵权内容,请点击举报。