热点资讯
物联网app开发 如何使用VBA代码已毕Excel的查找和替换功能?
发布日期:2024-09-28 08:50 点击次数:129
物联网app开发 每天一篇Excel时代图文微信公众号:Excel星球NO.145-I Find You作家:看见星光 微博:EXCELers / 学问星球:Excel
HI,全球好,我是星光。这章络续给全球共享VBA常用对象之单位格的编程手段。诚然莫得自古以来物联网app开发,但已经无人不晓的是,在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 丨
弄脏匹配查询
appFind关节和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语句时将谋划参数建立好意思满……这不错通过录制宏来得回,物联网app开发并不需要强行挂念。「查找替换」功能的选项建立会影响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(查找值,替换值,匹配形态:十足匹配如故部分匹配)
举个例子,将现时职责表中悉数的'看见星光'替换为'看见蟾光'。
代码如下▼
0路号码分析:上期走势一般,出现7个:21、27、33、42、63、69、78,最近10期0路号码出现72个,走势总体较热,其中冷温热期数比为0:9:1,0路号码大小个数比为41:31,大号表现明显较热,0路号码奇偶比为34:38,偶数号码表现活跃,对比上期,本期看好0路号码个数增加,走势大热,参考9个:06、12、18、24、36、42、51、57、66。
福彩快乐8第2024175期(上周三)开奖回顾:07 09 12 15 17 19 32 33 40 47 48 49 55 58 62 65 66 69 70 73,其中奖号四区比为6:3:5:6奇偶比为12:8。
Sub rngReplace() Cells.Replace '看见星光', '看见蟾光', xlWholeEnd Sub是不是很简便?
需要崇尚的是,和Find关节一样,「查找替换」的选项建立也会影响Replace关节,反过来,Replace关节也会影响「查找替换」谋划选项建立。比如,以上述代码为例,若是不详了第3参数,则常常默许实验的是部分匹配,毕竟部分匹配是「查找替换」的默许选项。
……
就酱,打完手工,下期重逢。
本站仅提供存储就业,悉数内容均由用户发布,如发现存害或侵权内容,请点击举报。