分享

查找某行第一个或最后一个红色的单元格 | VBA实例教程

 gblhp 2015-02-15

查找某行最后一个红色的单元格,当时说的是用循环的方法挨着个判断单元格的interior.colorindex属性,这种方法可行,但是循环起来会比较慢。今天翻看以前的代码,发现其实很早之前就写过类似的程序,时间太久忘了,说来这也是”温故而知新“的一个佐证,没事的时候多回去看看以前学的东西,说不定就会有新的惊喜。

言归正传,在手动操作的时候也是可以实现查找格式的,在查找对话框设置查找格式即可

查找格式

那我们就可以录制个宏来看看这个过程是怎样实现的。下面是我录制的代码

Sub Macro3()

With Application.FindFormat.Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Cells.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=True).Activate
Cells.FindNext(After:=ActiveCell).Activate
Cells.FindNext(After:=ActiveCell).Activate
End Sub

第一段代码就是在设置要查找的格式了,和普通查找不同的地方在于Find函数的SearchFormat属性要设置为True。下面我们就改造上面的代码,来实现查找第1行的第1个红色单元格和最后一个红色单元格。

Sub Macro1()

Application.FindFormat.Interior.Color = 255
Rows(1).Find(What:="", After:=Cells(1, 1), SearchDirection:=xlPrevious, SearchFormat:=True).Activate
Debug.Print ActiveCell.Address
End Sub

上面的代码是查找第1行最后一个红色的单元格,其中Application.FindFormat.Interior.Color = 255是规定查找的格式是红色,Find函数中我留了4个参数,what是不能省略的,表示查找的内容,这里内容为空,after表示从哪个单元格开始查,这里一定要注意程序不会查到这个单元格本身,而是从它的下一个开始查,SearchDirection表示查找的方向,xlPrevious表示从after规定的单元格往前查找,xlNext表示往后查找,SearchFormat说过了,表示查找格式。为什么这段代表可以找到最后一个红色单元格?关键就在After和SearchDirection两个参数的搭配上,从区域的第一个单元格cells(1,1)往前查,再往前不就是到最后了吗?

同样的,如果我们要查找区域中第一个红色单元格,那我们从区域的最后一个单元格往后查即可。

Sub Macro1()  '查找第一个红色单元格

Application.FindFormat.Interior.Color = 255
Rows(1).Find(What:="", After:=Cells(1, Columns.Count), SearchDirection:=xlNext, SearchFormat:=True).Activate
Debug.Print ActiveCell.Address
End Sub

这里说几句关于查找格式的问题,在用find函数进行查找时我们可以用findnext函数来实现查找下一个数据,但是在查找格式的时候findnext是不可行的,findnext不会保留查找的格式设置,所以要想实现依次查找所有的符合条件的格式你需要记录下上一次查找的位置,并重新设置格式,然后再用find函数进行查找。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多