ad

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.3 查找单元格中的指定字符

网友投稿 60 2023-11-07

【摘要】 本书摘自《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》一书中第1章,第3节,陈锡卢、李应钦著。

1.3 查找单元格中的指定字符:Range.find 方法。

在Excel中,查找功能对应Range.Find 方法——该方法用于查找区域中的特定信息,返回 Range 对象。其语法如下:

皮蛋:这么多参数啊!我的乖乖,能少点不?

无言:少是不可能的,只能说在实际使用时,挑需要的用。我也只会对必要和常用参数进 行详解,用得少的就按需讲解。先来看看每个参数的作用吧,如表1-6所示。

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.3 查找单元格中的指定字符

1.Range.Find 的模糊查找

Range.Find查找除了What参数是必需的之外,经常会用到带有LookAt 参数的模糊或者

精确查找。就像VLOOKUP函数一样,不同的匹配模式可以找到的数据量也不同。

无言:下面通过Range.Find的What和LookAt参数配合,讲解如何在图1-7中查找包含指定 关键字的单元格后将底色设置为红色。

代码1- 11 单元格值关键字模糊查找

001|Sub Rng_Find_LookAt_Part)

002| Dim Gjz As String,F_Rng As Range,Rng As Range

0031 Dim F_RngAdd As Range,St_Rng As String,Tem_Rng As Range

004| Gjz=InputBox("请输入需要查找的关键字。","查找关键字","区") 提示关键字输入

0051 IfLen(Gjz)=0 Then MsgBox"查找关键字不能为空,过程将退出":Exit Sub

006| With Sheet2.Range("A1").CurrentRegion

0071 Set F_Rng=.Offset(1,3).Resize(.Rows.Count-1)

008| F_Rng.Interior.ColorIndex =xINone

009| End With

010| With F_Rng

011| Set Tem_Rng=.Find(What:=Gjz,LookIn:=xIValues,LookAt:=xIPart)

012| If Not Tem_Rng Is Nothing Then

013 Set F_RngAdd=Tem_Rng

014| St_Rng=Tem_Rng.Address

015| Do

0161 Set Tem_Rng=.FindNext(Tem_Rng)

017| If Tem_Rng.Address ~ St_Rng Then Set F_RngAdd=Application.Union(F_RngAdd,Tem_

Rng)

018 Loop While Tem_Rng.Address ~ St_Rng

019| Else

020| Exit Sub

021|

End If

0221

End With

0231

With F_RngAdd

024|

Interior.Colorlndex =3

0251 .Select

026| MsgBox" 区域中找到"&.Count&" 个含有"&Gjz&" 的单元格"&vbCr&.Address(0,0)

027| End With

028|End Sub

代码1-11示例过程,通过查找单元格的值是否含有指定关键字,若含有,则将该单元格 并入F_RngAdd 变量,最后对这些单元格进行涂色。

(1)首先通过InputBox 函数的指定关键字赋值给Gjz 变量,并通过If 语句判断 Gjz变量 是否为空,若为空则退出过程。接着将D 列标题行以外的区域赋值给 F_Rng 变量,该变量作 为查找关键字的区域 ;F_Rng.Interior.Colorlndex =XINone 语句将该区域的底色设置为无。

(2)Set Tem_Rng=.Find(What:=Gjz,LookIn:=XIValues,LookAt:=XIPart)的作用以查找单 元格值的方式在F_Rng 单元格中模糊查找匹配满足Gjz变量的单元格。

(3)F_Rng 区域中若找不到含有Gjz的单元格,那么过程将退出;若找到含有该关键字 单元格,则将单元格对象赋值给 F_RngAdd和 St_Rng变量 —F_RngAdd 变量存放所有满足 Gjz变量存放 Rang对象; St_Rng变量则是存放查找到的第1个单元格的文本位置,作为后面 比较。

(4)到第1个含有单元格区域后通过Do 循环获取F_Rng 区域中其他单元格。在循环语 句 中 使 用 了Set Tem_Rng=.FindNext(Tem_Rng)语 句 查 找 区 域 中 相 同 要 素 的 下 一 个 单 元 格 。 该 语句使用了Range.FindNext 方法,其语句和作用如下。

继续由 Find 方法开始的搜索

Rnage.FindNext(After)

Rnage.FindNext 的作用是继承Find 方法所有的设置,从已找到的单元格位置查找下一个 相同条件的单元格,继续往后查找;其中 After参数为上一个已找到的Range 对象。

(5)IfTem_Rng.Address ~ St_Rng语句判断下一个单元格是否与第1个单元格地址相同。 若不同,则通过 Set F_RngAdd=Application.Union(F_RngAdd,Tem_Rng)将 Tem_Rng单元格并 入F_RngAdd; 直到Do 循环中找到的下一个单元格位置与 St_Rng相同时退出该循环。

(6)将F_RngAdd 变量中的所有单元格位置底色设置为红色( Interior.Colorlndex=3), 并选中这些单元格,通过Msgbox 函数提示单元格数量及具体位置。

无言:代码1-11示例过程中,运用了Range.Find方法的What 、LookIn 、LookAt三个参数, 在单元格的值中查找含有关键字单元格。

皮蛋: Rnage.FindNext是向下查找,那如果我想向上查找呢?

无言:那可以使用Range.FindPrevious方法,它的作用是依据已找到的单元格向上查找相 同的下一单元格,语法如下。

继续由 Find 方法开始的搜索

Rnage.FindPrevious (After)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.2 修改或增加批注
下一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_3.1 错误公式的重新编辑
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×