目录

Range对象的Find方法

参数省略表示法

查找格式

示例:

实现代码

使用Is Nothing判断对象是否初始化

IsError函数

SpeciaICells方法

Find方法的一般形式

CVErr函数


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   康小芸 管理部 1800 1800
齐光 管理部 5425   刘晨 管理部 5318 5318
于健惠 管理部 4320   齐光 管理部 5425 5425
王文群 管理部 1875   于健惠 管理部 4320 4320
曾国安 管理部 4726   王文群 管理部 1875 1875
刘志峰 管理部 1850   曾国安 管理部 4726 4726
刘玉录 管理部 1385   刘志峰 管理部 1850 1850
杨建军 人事部 2700   刘玉录 管理部 1385 1385
曲波 人事部 3215   俞卫广 管理部 6700 #N/A
林革壮 市场部 1565   杨建军 人事部 2700 2700
李卫卿 市场部 6213   曲波 人事部 3215 3215
孙正发 市场部 1950   林革壮 市场部 1565 1565
毛传阳 销售部 3500   李卫卿 市场部 6213 6213
张元端 销售部 2465   申玲 市场部 1230 #N/A
朱凌波 销售部 3420   孙正发 市场部 1950 1950
张宏 销售部 2310   毛传阳 销售部 3500 3500
郦锡文 销售部 1912   张元端 销售部 2465 2465
张占斌 销售部 1800   朱凌波 销售部 3420 3420
曹阳 销售部 2632   张宏 销售部 2310 2310
周书敬 销售部 4200   郦锡文 销售部 1912 1912
姚胜 销售部 5300   张占斌 销售部 1800 1800
郭建 销售部 1571   曹阳 销售部 2632 2632
高波 销售部 6200   周书敬 销售部 4200 4200
卢卫 总经办 3200   姚胜 销售部 5300 5300
赵秀池 总经办 2450   郭建 销售部 1571 1571
        高波 销售部 6200 6200
        卢卫 总经办 3200 3200
        赵秀池 总经办 2450 2450

实现代码

Sub 替换错误值()Dim rng As RangeSet rng = Range("H2:H36").Find("#N/A", LookIn:=xlValues, lookat:=xlWhole)'当单元格被找到时执行循环Do While Not rng Is Nothingrng.Value = 0Set rng = Range("H2:H26").FindNext(rng)Loop
End Sub

使用Is Nothing判断对象是否初始化

当对象变量未进行初始化(即没有指向任何对象)时,该变量的值是Nothing。当需要判断某个变量的值是否是Nothing时,可以使用以下表达式:

对象 Is Nothing

该表达式将返回一个逻辑值,当对象为Nothing时,返回True,反之返回False。本例使用了该方法来判断Rng对象是否被初始化,即Find方法是否有返回值。通常在涉及单元格查找时,会使用该判断来规避某些错误。

IsError函数

本例使用的是通过单元格遍历的方式,逐个判断单元格的值是否为错误值,若为错误值,则更改为0。当单元格的值错误时,其Value属性是不可直接读取的。但可以通过IsError函数来判断其是否为错误值,其语法如下:

IsError(Expression)

其中,Expression为一个表达式,本例中为单元格的Value属性。该函数的结果返回一个逻辑值,当表达式为错误值时,返回True,反之则返回False。

SpeciaICells方法

单元格对象的SpeciaICells方法用来查找特殊的单元格,其语法为:

Rng.SpecialCells(Type, [Value])

其中,Rng表示Range对象,即查找区域。Type表示定位的单元格类型,可以为表1中的任一常量。当Type参数指定为xICeIITypeConstants或xICeIITypeFormulas时,可使用Value参数以进一步设置所要查找的单元格,见表2。

表1 SpecialCells方法的Type参数

常  量

说  明

xlCellTypeComments

-4144

含有注释的单元格

xlCelITypeConstants

2

含有常量的单元格

xlCellTypeFormulas

-4123

含有公式的单元格

xlCellTypeBlanks

4

空单元格

xlCellTypeLastCell

11

所用区域中的最后一个单元格

xlCellTypeAllFormatConditions

-4172

合有条件格式的单元格

xlCellTypeAllVaLidation

-4174

含有验证条件的单元格

xlCellTypeSameFormatConditious

-4173

含有相同条件格式的单元格

xlCellTypeSameValidation

-4175

验证条件相同的单元格

表2 SpecialCells方法的Value参数

常量

说明

xlErrors

16

错误值

xlLogical

4

逻辑值

xlNumbers

1

数字

xlTextValues

2

文本

实质上,SpeciaICells方法执行的是单元格定位的基本操作中的一部分,其参数的设置  与该基本操作的对应关系见图。

当指定区域内包含有所要查找的特殊单元格时,SpeciaICells方法返回一个Range对象,但当未找到时,则该方法会发生错误。为避免错误,本例使用OnError语句忽略错误并继续执行。

Find方法的一般形式

当使用Find方法进行查找时,当找到符合条件的单元格后,通常需要记录第一次找到单元格的地址,当再次找到该单元格时即可停止循环,以避免进入死循环。
    如需要为所有的错误值单元格更改填充色为红色时,而非更改单元格值时,那么错误单元格将始终被所指定的查找条件所找到。因而使用一个变量FirstAdd记录第一个被找到的单元格的地址,并以此地址作为循环的条件。当该单元格再次被找到时,因为其己被找到过,则退出循环。参考代码如下:

Option ExplicitSub 替换错误值的填充色()Dim Rng As RangeDim FirstAdd As String'查找首个满足条件的单元格Set Rng = Range("H2:H36").Find("#N/A", LookIn:=xlValues, lookat:=xlWhole)'当单元格被找到时If Not Rng Is Nothing Then'记录首次找到的单元格地址FirstAdd = Rng.AddressDo'更改颜色Rng.Interior.Color = RGB(255, 0, 0)'查找下一个Set Rng = Range("H2:H36").FindNext(Rng)'当单元格未被找到是'或找到的单元格的地址为首次找到的单元格地址(即该单元格已经被访问过)'退出循环Loop While Not Rng Is Nothing And Rng.Address <> FirstAddEnd If
End Sub

CVErr函数

若使用了IsError函数来判断单元格的值是否为错误值,当需要获取该错误的详细类型时,则必须使用CVErr函数将错误代码转换为错误值,其语法如下:

CVErr(errornumber)

其中,errornumber为错误代码或错误常量,单元格的错误代码如表所示。

表 单元格公式错误代码

错误常量

错误代码

单元格错误值

xlErrDiv0

2007

#DIV0!

xlErrNA

2042

#N/A

xlErrName

2029

#NAME?

xlErrNull

2000

#NULL!

xlErrNum

2036

#NUM!

xlErrRef

2023

#REF!

xlErrValue

2015

#VALUE!

若只需要对“#N/A”错误类型的单元格进行替换,则在循环体内判断时需要增加CVErr函数以进一步判断错误类型,代码如下:

'单元格为错误值
If IsError(Rng.Value) Then'指定错误If Rng.Value=CVErr(xlErrNA) Then'更改为0Rng.Value=0        End If
End If

Excel 2010 VBA 入门 036 替换所有的错误值相关推荐

  1. Excel 2010 VBA 入门 034 创建图片批注

    目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...

  2. Excel 2010 VBA 入门 001显示开发工具选项卡

    目录 VBA简介 宏简介 显示"开发工具"选项卡 ​ VBA简介 Visual Basic for Application (VBA)是Visual Basic的一种宏语言,是依附 ...

  3. Excel 2010 VBA 入门 095 数据处理之用数组实现分列

    示例 如图所示,该表为某系统中导出的数据.由于该数据将原本的四列信息合并至一个单元格中,现希望利用数组对该数据进行分列,将其分为四列. 关键词;关注指数;升降幅度;升降位次 小胸钢托聚拢游泳衣;12; ...

  4. Excel 2010 VBA 入门 006 设置宏安全性

    目录 操作方法 步骤1单击"开发工具"选项卡中的"宏安全性"按钮,如图所示. ​ 步骤2在"信任中心"的"宏设置"选项中 ...

  5. Excel 2010 VBA 入门 117 具备输入功能的对话框

    目录 例 码 VBA.InputBox函数 InputBox函数的返回值 例 在Excel VBA中,经常给用户提供输入信息的功能用以获取信息,并执行相应的操作.例如,在一个对话框供用户输入信息,然后 ...

  6. Excel 2010 VBA 入门 048 批量替换文本中的指定字符(replayce函数和方法)

    目录 示例: 实现代码 Replace函数 单元格对象的Replace方法 使用Replace方法实现代码 示例: 如图所示,该表为某公司商品编码.由于商品目录升级,现商品编码中以"GXGY ...

  7. Excel 2010 VBA 入门 139 创建工作簿级的自定义选项卡

    目录 题 码 Excel工作簿的实质 XML简介 customUI.xml 常用的功能区控件及通用属性 tabs控件和tab控件 group控件 命令控件 内置控件的ID customUI.xml中控 ...

  8. Excel 2010 VBA 入门 098 导入Access数据库的数据

    示例 Access是微软Office组件的数据库软件,使用它可以进行简单的数据库软件的开发.但Access的图表功能和数据分析功能不如Excel强大,常用的做法可以将Access中的数据导入 Exce ...

  9. Excel 2010 VBA 入门 039 按条件隐藏数据行

    目录 示例: 实现代码1 行和列的隐藏 实例代码2 单元格对象的AutoFilter(自动筛选)方法 实现代码3 单元格对象的AdvancedFilter(高级筛选)方法 ​​​​​​​ 示例: 在E ...

最新文章

  1. Python中的元编程:一个关于修饰器和元类的简单教程
  2. 互联网公司「敏捷开发」,打造高效执行能力
  3. ipad2“新瓶装老酒” 苹果创新乏力?
  4. poj 1948(搜索+剪枝)
  5. EntityFramework6.X 之 Fulent
  6. Rust 中的继承与代码复用
  7. SQL的连接查询——内连接、左连接、右连接、自连接(重要)
  8. 简单SNIFFER 应用驱动安装及使用
  9. 【有利可图网】PS实战教程55:打破次元壁,将照片从三次元跨越到二次元
  10. AI微信小程序源码下载人脸照片AI转换动漫照片全新源码安装简单无需服务器域名
  11. 网站实现扫描二维码关注微信公众号,实现自动登陆
  12. 台币 日元 没有小数位问题_SAP刘梦_新浪博客
  13. 3D软件中怎么绘制杯子?
  14. 括号匹配,实现简单计算器(加减乘除,小括号)
  15. Excel技巧--数据不能按照1-100来排列
  16. 清理服务器多余的图片(文件、数据)
  17. 下面哪个python库不能用于提取网页信息_利用python的webscraping库采集抓取爱帮网电话号码...
  18. 披着微电影外衣的广告 在扼杀微电影产业
  19. Linux下cp命令
  20. 大咖说*图书分享-Node布道师狼叔|三卷书详解Node.js

热门文章

  1. java 超出 xmx_java进程内存占用超过xmx设置的问题
  2. ffmpeg常见视频操作
  3. SIM800C(GPRS)服务器通信
  4. 基于stc15w4k56s LCD1602的ADC(中断)的实验
  5. HashMap原理理解
  6. C++中static成员
  7. iOS 检测app进入后台或前台
  8. 安全可靠的SRT实时传输协议
  9. 通过氨基酸频率特征量来预测蛋白热稳定性——随机森林算法
  10. 美图秀秀-美化图片之【特效】界面设计