目录
Range对象的Find方法
使用Range对象的Find方法可以实现批量查找符合条件的单元格。Find方法的语法如下:
Rng.Find(What,[After],[Lookln],[lookAt],[SearchOrder],[SearchDirection],MatchCase],[MatchByte],[SearchFormat])
其中,Rng为一个Range对象,表示需要执行查找方法的单元格区域,即指明查找的范围。各参数说明如下。
- 参数What为所要查找的值。
- 参数After为一个Range对象,表示查找的起始单元格。
- 参数Lookln为查找的类型,可以为xIComments(批注)、xIFormulas(公式)或xIValues(值)。
- 参数LookAt为单元格匹配方式,可以为xIWhole(匹配整个单元格)或xIPart(匹配部分)。
- 参数SearchOrder为搜索的顺序,可以为xIByRows(按行查找)或xIByColumns(按列查找)。
- 参数SearchDirection为搜索的方向,可以为xINext(查找下一个)或xIPrevious(查找上一个).
- 参数MatchCase为大/小写匹配方式,True表示区分大小写,False表示不区分。
- 参数MatchByte表示半/全角匹配方式,True表示区分半全角,False表不不区分。
- 参数SearchFormat表示匹配格式,True表示要匹配格式,False表示无须匹配。
Find方法的实质是对应单元格查找的基本操作,使用该方法查找单元格将会更改单元格查找对话框的各种设置。各参数对应的功能如图所示。
参数省略表示法
Range的Find方法有许多参数。在执行该方法时,可以将参数添补完整,只需开启“自动列出成员”选项即可出现参数提示,并可根据粗体的提示逐个输入参数。
当需要省略某些参数时,开发者可以不填写所有的参数,只需在各个参数表达式之间使用逗号分隔,使用以下表达式表示某个参数即可:
参数名称:=参数值
使用该方法则不必遵循各个参数的固定位置。如本例省略了参数After,直接填写Lookln和LookAt,故使用以下表达式:
Find("#N/A",LookIn:=xlValues,LookAt:=xlWhole)
使用此方法需注意以下两点。
- 当直接写入参数值而未标明参数名称时,则参数值为其所在位置的参数的值。
- 必须使用冒号(:)与等号(=)的组合来传递参数值,否则会发生错误。
查找格式
当需要查找格式时,需要将SearchFormat参数设置为True,并且在执行Find方法之前需要对Application. Format对象进行格式的设置。该对象是一个只包含单元格格式设置的特殊对象,除了没有特殊的属性(如Value等)外,其余的格式属性与单元格的格式属性相同。因而,开发者可以通过录制宏的方式轻松获取格式设置代码。
示例:
在Excel中,比较两张表的不同时经常采用Vlookup函数。如图所示,该表为某公司员工的工资单,现需要比较两个月的工资差异,在使用函数的过程中发生了错误值。经查得知,发生错误值的员工1月尚未入职,除了修改公式外,是否可以使用VBA批量替换这些错误值,使其更改为0 ?
姓名 | 部门 | 1月 | 姓名 | 部门 | 2月 | 查找1月工资 | |
程建华 | 财务部 | 2875 | 程建华 | 财务部 | 2875 | 2875 | |
李国敏 | 财务部 | 3050 | 李国敏 | 财务部 | 3050 | 3050 | |
袁志刚 | 财务部 | 3523 | 袁志刚 | 财务部 | 3523 | 3523 | |
周汉林 | 管理部 | 2890 | 周汉林 | 管理部 | 2890 | 2890 | |
孙玉梅 | 管理部 | 2580 | 骈永富 | 管理部 | 2850 | #N/A | |
陈亚菁 | 管理部 | 3460 | 孙玉梅 | 管理部 | 2580 | 2580 | |
康小芸 | 管理部 | 1800 | 陈亚菁 | 管理部 | 3460 | 3460 | |
刘晨 | 管理部 | 5318 | 康小芸 |