Range对象应用大全Find方法应用大全.docx

上传人:b****5 文档编号:6649518 上传时间:2023-01-08 格式:DOCX 页数:36 大小:151.33KB
下载 相关 举报
Range对象应用大全Find方法应用大全.docx_第1页
第1页 / 共36页
Range对象应用大全Find方法应用大全.docx_第2页
第2页 / 共36页
Range对象应用大全Find方法应用大全.docx_第3页
第3页 / 共36页
Range对象应用大全Find方法应用大全.docx_第4页
第4页 / 共36页
Range对象应用大全Find方法应用大全.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

Range对象应用大全Find方法应用大全.docx

《Range对象应用大全Find方法应用大全.docx》由会员分享,可在线阅读,更多相关《Range对象应用大全Find方法应用大全.docx(36页珍藏版)》请在冰豆网上搜索。

Range对象应用大全Find方法应用大全.docx

Range对象应用大全Find方法应用大全

Range对象应用大全(4)—Find方法应用大全

2009年08月16日,8:

21下午

 (4 人投票,平均:

 5.00 outof5)

本文整理了以前的一些关于Find方法的文章,作为ExcelVBA应用大全的一部分。

1.Find方法的作用

使用VBA在工作表或单元格区域中查找某项数据时,我们通常使用For…Next循环,这在小范围中使用还可以,但应用在大量数据中查找时,会耗费较多时间。

而在Excel工作表中,通常使用菜单“编辑>>查找”命令或按Ctrl+F组合键,在“查找和替换”对话框中来迅速查找所需的数据。

在VBA中,我们也能使用这种方法,即Find方法,这在下面的内容中介绍。

Find方法将在指定的单元格区域中查找包含参数指定数据的单元格,若找到符合条件的数据,则返回包含该数据的单元格;若未发现相匹配的数据,则返回Nothing。

该方法返回一个Range对象,在使用该方法时,不影响选定区域或活动单元格。

为什么要使用Find方法呢?

最主要的原因是查找的速度。

如果要使用VBA代码在包含大量数据的单元格区域中查找某项数据,应该使用Find方法。

例如,在工作表Sheet1的单元格IV65536中输入fanjy,然后运行下面的代码:

SubQuickSearch()

IfNotSheet1.Cells.Find("fanjy")IsNothingThenMsgBox"已找到fanjy!

"

EndSub

再试试下面的代码:

SubSlowSearch()

DimRAsRange

ForEachRInSheet1.Cells

IfR.Value="fanjy"ThenMsgBox"已找到fanjy!

"

NextR

EndSub

比较一下两段代码的速度,可知第一段代码运行很快,而第二段代码却要执行相当长的一段时间。

2.Find方法的语法

[语法]

<单元格区域>.Find(What,[After],[LookIn],[LookAt],[SearchOrder],[SearchDirection],[MatchCase],[MatchByte],[SearchFormat])

[参数说明]

(1)<单元格区域>,必须指定,返回一个Range对象。

(2)参数What,必需指定。

代表所要查找的数据,可以为字符串、整数或者其它任何数据类型的数据。

对应于“查找与替换”对话框中,“查找内容”文本框中的内容。

(3)参数After,可选。

指定开始查找的位置,即从该位置所在的单元格之后向后或之前向前开始查找(也就是说,开始时不查找该位置所在的单元格,直到Find方法绕回到该单元格时,才对其内容进行查找)。

所指定的位置必须是单元格区域中的单个单元格,如果未指定本参数,则将从单元格区域的左上角的单元格之后开始进行查找。

(4)参数LookIn,可选。

指定查找的范围类型,可以为以下常量之一:

xlValues、xlFormulas或者xlComments,默认值为xlFormulas。

对应于“查找与替换”对话框中,“查找范围”下拉框中的选项。

(5)参数LookAt,可选。

可以为以下常量之一:

XlWhole或者xlPart,用来指定所查找的数据是与单元格内容完全匹配还是部分匹配,默认值为xlPart。

对应于“查找与替换”对话框中,“单元格匹配”复选框。

(6)参数SearchOrder,可选。

用来确定如何在单元格区域中进行查找,是以行的方式(xlByRows)查找,还是以列的方式(xlByColumns)查找,默认值为xlByRows。

对应于“查找与替换”对话框中,“搜索”下拉框中的选项。

(7)参数SearchDirection,可选。

用来确定查找的方向,即是向前查找(XlPrevious)还是向后查找(xlNext),默认的是向后查找。

(8)参数MatchCase,可选。

若该参数值为True,则在查找时区分大小写。

默认值为False。

对应于“查找与替换”对话框中,“区分大小写”复选框。

(9)参数MatchByter,可选。

即是否区分全角或半角,在选择或安装了双字节语言时使用。

若该参数为True,则双字节字符仅与双字节字符相匹配;若该参数为False,则双字节字符可匹配与其相同的单字节字符。

对应于“查找与替换”对话框中,“区分全角/半角”复选框。

(10)参数SearchFormat,可选,指定一个确切类型的查找格式。

对应于“查找与替换”对话框中,“格式”按钮。

当设置带有相应格式的查找时,该参数值为True。

(11)在每次使用Find方法后,参数LookIn、LookAt、SearchOrder、MatchByte的设置将保存。

如果下次使用本方法时,不改变或指定这些参数的值,那么该方法将使用保存的值。

在VBA中设置的这些参数将更改“查找与替换”对话框中的设置;同理,更改“查找与替换”对话框中的设置,也将同时更改已保存的值。

也就是说,在编写好一段代码后,若在代码中未指定上述参数,可能在初期运行时能满足要求,但若用户在“查找与替换”对话框中更改了这些参数,它们将同时反映到程序代码中,当再次运行代码时,运行结果可能会产生差异或错误。

若要避免这个问题,在每次使用时建议明确的设置这些参数。

3.Find方法使用示例

3.1 本示例在活动工作表中查找what变量所代表的值的单元格,并删除该单元格所在的列。

SubFind_Error()

DimrngAsRange

DimwhatAsString

what="Error"

Do

Setrng=ActiveSheet.UsedRange.Find(what)

IfrngIsNothingThen

ExitDo

Else

Columns(rng.Column).Delete

EndIf

Loop

EndSub

3.2带格式的查找

本示例在当前工作表单元格中查找字体为”ArialUnicodeMS”且颜色为红色的单元格。

其中,Application.FindFormat对象允许指定所需要查找的格式,此时Find方法的参数SearchFormat应设置为True。

SubFindWithFormat()

WithApplication.FindFormat.Font

.Name="ArialUnicodeMS"

.ColorIndex=3

EndWith

Cells.Find(what:

="",SearchFormat:

=True).Activate

EndSub

[小结]在使用Find方法找到符合条件的数据后,就可以对其进行相应的操作了。

您可以:

∙对该数据所在的单元格进行操作;

∙对该数据所在单元格的行或列进行操作;

∙对该数据所在的单元格区域进行操作。

4.与Find方法相联系的方法

可以使用FindNext方法和FindPrevious方法进行重复查找。

在使用这两个方法之前,必须用Find方法指定所需要查找的数据内容。

4.1FindNext方法

FindNext方法对应于“查找与替换”对话框中的“查找下一个”按钮。

可以使用该方法继续执行查找,查找下一个与Find方法中所指定条件的数据相匹配的单元格,返回代表该单元格的Range对象。

在使用该方法时,不影响选定区域或活动单元格。

4.1.1语法

<单元格区域>.FindNext(After)

4.1.2参数说明

参数After,可选。

代表所指定的单元格,将从该单元格之后开始进行查找。

开始时不查找该位置所在的单元格,直到FindNext方法绕回到该单元格时,才对其内容进行查找。

所指定的位置必须是单元格区域中的单个单元格,如果未指定本参数,则将从单元格区域的左上角的单元格之后开始进行查找。

当查找到指定查找区域的末尾时,本方法将环绕至区域的开始继续查找。

发生环绕后,为停止查找,可保存第一次找到的单元格地址,然后测试下一个查找到的单元格地址是否与其相同,作为判断查找退出的条件,以避免出现死循环。

当然,如果在查找的过程中,将查找到的单元格数据进行了改变,也可不作此判断,如下例所示。

4.2FindPrevious方法

可以使用该方法继续执行Find方法所进行的查找,查找前一个与Find方法中所指定条件的数据相匹配的单元格,返回代表该单元格的Range对象。

在使用该方法时,不影响选定区域或活动单元格。

4.2.1语法

<单元格区域>.FindPrevious(After)

4.2.2参数说明

参数After,可选。

代表所指定的单元格,将从该单元格之前开始进行查找。

开始时不查找该位置所在的单元格,直到FindPrevious方法绕回到该单元格时,才对其内容进行查找。

所指定的位置必须是单元格区域中的单个单元格,如果未指定本参数,则将从单元格区域的左上角的单元格之前开始进行查找。

当查找到指定查找区域的起始位置时,本方法将环绕至区域的末尾继续查找。

发生环绕后,为停止查找,可保存第一次找到的单元格地址,然后测试下一个查找到的单元格地址是否与其相同,作为判断查找退出的条件,以避免出现死循环。

4.2.3示例

在工作表中输入如下图1所示的数据,至少保证在A列中有两个单元格输入了数据“excelhome”。

 图1:

测试的数据

在VBE编辑器中输入下面的代码测试Find方法、FindNext方法、FindPrevious方法,体验各个方法所查找到的单元格位置。

SubtestFind()

DimfindValueAsRange

SetfindValue=Worksheets("Sheet1").Columns("A").Find(what:

="excelhome")

MsgBox"第一个数据发现在单元格:

"&findValue.Address

SetfindValue=Worksheets("Sheet1").Columns("A").FindNext(After:

=findValue)

MsgBox"下一个数据发现在单元格:

"&findValue.Address

SetfindValue=Worksheets("Sheet1").Columns("A").FindPrevious(After:

=findValue)

MsgBox"前一个数据发现在单元格"&findValue.Address

EndSub

5.综合示例

[示例1]查找值并选中该值所在的单元格

[示例1-1]

SubFind_First()

DimFindStringAsString

DimrngAsRange

FindString=InputBox("请输入要查找的值:

")

IfTrim(FindString)<>""Then

WithSheets("Sheet1").Range("A:

A")

Setrng=.Find(What:

=FindString,_

After:

=.Cells(.Cells.Count),_

LookIn:

=xlValues,_

LookAt:

=xlWhole,_

SearchOrder:

=xlByRows,_

SearchDirection:

=xlNext,_

MatchCase:

=False)

IfNotrngIsNothingThen

Application.Gotorng,True

Else

MsgBox"没有找到!

"

EndIf

EndWith

EndIf

EndSub

示例说明:

运行程序后,将在工作表Sheet1的A列中查找InputBox函数输入框中所输入的值,并查找该值所在的第一个单元格,如果没有找到该值,则显示消息框“没有找到!

”。

语句Application.Gotorng,True的作用是将窗口滚动至该单元格,即该单元格位于当前窗口的左上方。

[示例1-2]

SubFind_Last()

DimFindStringAsString

DimrngAsRange

FindString=InputBox("请输入要查找的值")

IfTrim(FindString)<>""Then

WithSheets("Sheet1").Range("A:

A")

Setrng=.Find(What:

=FindString,_

After:

=.Cells

(1),_

LookIn:

=xlValues,_

LookAt:

=xlWhole,_

SearchOrder:

=xlByRows,_

SearchDirection:

=xlPrevious,_

MatchCase:

=False)

IfNotrngIsNothingThen

Application.Gotorng,True

Else

MsgBox"Nothingfound"

EndIf

EndWith

EndIf

EndSub

示例说明:

与上面的程序不同的是,运行该程序后,将在工作表Sheet1的A列中查找InputBox函数输入框中所输入的值,并选中该值所在的最后一个单元格。

请比较代码中Find方法的参数。

[示例1-3]

SubFind_Todays_Date()

DimFindStringAsDate

DimrngAsRange

FindString=Date

WithSheets("Sheet1").Range("A:

A")

Setrng=.Find(What:

=FindString,_

After:

=.Cells(.Cells.Count),_

LookIn:

=xlFormulas,_

LookAt:

=xlWhole,_

SearchOrder:

=xlByRows,_

SearchDirection:

=xlNext,_

MatchCase:

=False)

IfNotrngIsNothingThen

Application.Gotorng,True

Else

MsgBox"没有找到!

"

EndIf

EndWith

EndSub

示例说明:

运行程序后,将在工作表Sheet1的A列中查找日期所在的单元格,并选中第一个日期单元格。

[示例2]在B列中标出A列中有相应值的单元格

SubMark_cells_in_column()

DimFirstAddressAsString

DimmyArrAsVariant

DimrngAsRange

DimIAsLong

 

Application.ScreenUpdating=False

myArr=Array("VBA")

'也能够在数组中使用更多的值,如下所示

'myArr=Array("VBA","VSTO")

WithSheets("Sheet2").Range("A:

A")

 

.Offset(0,1).ClearContents

'清除右侧单元格中的内容

ForI=LBound(myArr)ToUBound(myArr)

Setrng=.Find(What:

=myArr(I),_

After:

=.Cells(.Cells.Count),_

LookIn:

=xlFormulas,_

LookAt:

=xlWhole,_

SearchOrder:

=xlByRows,_

SearchDirection:

=xlNext,_

MatchCase:

=False)

'如要想查找rng.value中的一部分,可使用参数值xlPart

'如果使用LookIn:

=xlValues,也会处理公式单元格中与条件相同的值

IfNotrngIsNothingThen

FirstAddress=rng.Address

Do

rng.Offset(0,1).Value="X"

'如果值VBA找到,则在该单元格的右侧列中的相应单元格作上标记

Setrng=.FindNext(rng)

LoopWhileNotrngIsNothingAndrng.Address<>FirstAddress

EndIf

NextI

EndWith

Application.ScreenUpdating=True

EndSub

示例说明:

运行程序后,将查找工作表Sheet2上A列中的每个单元格,并在值为“VBA”所在的单元格的右侧单元格中作出标记“X”。

[示例3]为区域中指定值的单元格填充颜色

SubColor_cells_in_Range()

DimFirstAddressAsString

DimMySearchAsVariant

DimmyColorAsVariant

DimrngAsRange

DimIAsLong

 

MySearch=Array("VBA")

myColor=Array("3")

 

'也能在数组中使用多个值

'MySearch=Array("VBA","Hello","OK")

'myColor=Array("3","6","10")

WithSheets("Sheet3").Range("A1:

C4")

 

'将所有单元格中的填充色改为无填充色

.Interior.ColorIndex=xlColorIndexNone

 

ForI=LBound(MySearch)ToUBound(MySearch)

Setrng=.Find(What:

=MySearch(I),_

After:

=.Cells(.Cells.Count),_

LookIn:

=xlFormulas,_

LookAt:

=xlWhole,_

SearchOrder:

=xlByRows,_

SearchDirection:

=xlNext,_

MatchCase:

=False)

'如果想查找rng.value的一部分,则使用参数值xlPart

'如果使用LookIn:

=xlValues,则也会处理公式单元格

IfNotrngIsNothingThen

FirstAddress=rng.Address

Do

rng.Interior.ColorIndex=myColor(I)

Setrng=.FindNext(rng)

LoopWhileNotrngIsNothingAndrng.Address<>FirstAddress

EndIf

NextI

EndWith

EndSub

示例说明:

运行程序后,将在工作表Sheet3上的单元格区域A1:

C4中查找含有“VBA”的单元格,并将这些单元格填充为红色。

如示例中的注释所提示的,也可以使用数组,将不同的值所在的单元格标记为不同的颜色。

也可以添加下面的语句,改变单元格中文本的颜色:

.Font.ColorIndex=0

.Font.ColorIndex=myColor(I)

[示例4]为工作表中指定值的单元格填充颜色

SubColor_cells_in_Sheet()

DimFirstAddressAsString

DimMySearchAsVariant

DimmyColorAsVariant

DimrngAsRange

DimIAsLong

 

MySearch=Array("VBA")

myColor=Array("3")

 

'也能在数组中使用多个值

'MySearch=Array("VBA","Hello","OK")

'myColor=Array("3","6","10")

WithSheets("Sheet4").Cells

 

'将所有单元格中的填充色改为无填充色

.Interior.ColorIndex=xlColorIndexNone

 

ForI=LBound(MySearch)ToUBound(MySearch)

Setrng=.Find(What:

=MySearch(I),_

After:

=.Cells(.Cells.Count),_

LookIn:

=xlFormulas,_

LookAt:

=xlWhole,_

SearchOrder:

=xlByRows,_

SearchDirection:

=xlNext,_

MatchCase:

=False)

'如果想查找rng.value的一部分,则使用参数值xlPart

'如果使用LookIn:

=xlValues,则也会处理公式单元格

IfNotrngIsNothingThen

FirstAddress=rng.Address

Do

rng.Interior.ColorIndex=myColor(I)

Setrng=.FindNext(rng)

LoopWhileNotrngIsNothingAndrng.Address<>FirstAddress

EndIf

NextI

EndWith

EndSub

示例说明:

运行程序后,将在工作表Sheet4中查找含有“VBA”的单元格,并将这些单元格填充为红色。

如示例中的注释所提示的,也可以使用数组,将不同的值所在的单元格标记为不同的颜色。

也可以添加下面的语句,改变单元格中文本的颜色:

.Font.ColorIndex=0

.Font.ColorIndex=myColor(I)

[示例5]为工作簿所有工作表中含有指定值的单元格填充颜色

SubColor_cells_in_All_Sheets()

DimFirstAddressAsString

DimMySearchAsVariant

DimmyColorAsVariant

DimshAsWorksheet

DimrngAsRange

DimIAsLong

 

MySearch=Array("ron")

myColor=Array("3")

 

'也能在数组中使用多个值

'MySearch=Array("VBA","Hello","OK")

'myColor=Array("3","6","10")

ForEachshInActiveWorkbook.Worksheets

Withsh.Cells

 

'将所有单元格中的填充色改为无填充色

.Interior.ColorIndex=x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1