VBA实战技巧精粹016:关于Find方法解决如何由前向后及由后往前的查找与替换

原来的问题是①如何实现从前向后查找或从后向前查找;②若查找不到的话,如何处理。

看不懂代码的感觉和看懂了并能进一步改进的感觉就是不一样啊。

不管想解决哪一个问题,都离不开find方法,所以按惯例(抄袭都成惯例,所以可以理解那些人为什么打嘴仗了……)先把官方解释给搬过来,因为我发现最权威的往往是官方解释,不服不行。

见谅啊,没办法,刚刚升级为G3.9,咱也不知道怎么回事,在VBA帮助文件里的东西复制到这儿竟然没法粘贴了,只能截图了,将就着吧,再说这也不是重点,因为这些东西,你的ExcelVBA也有。

下面看看如何从前向后查找,这也是我们最常用的操作了。

基本思路就是从最后1个单元格向后查找,怎么这样说呢?从最后1个单元格向后查找,已经是最后1个了,怎么还再向后查找?!是啊,就要这样,因为find方法支持回绕查找,所以这样正好。已经到最后1个单元格,再向后应该是哪一个呢?猜对了,又回到第1个了;再结合findnext,就可以实现从前向后查找了。

代码如下:

Sub 由前向后查找并替换()
    Dim c As Range
    Range("A1:A10").Value = 2
    With Range("a1:a10")
        Set c = .Find(2, After:=.Cells(.Cells.Count), LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext)
        Do While Not c Is Nothing
                c.Value = 5
                Set c = .
FindNext(c)
        Loop
    End With
End Sub

上面代码中红体字部分最重要,After参数为所选单元格区域的最后1个单元格,这样保证了是从最后1个单元格的下1个开始的,而SearchDirection参数指定了搜索的方向是向后搜索;而FindNext方法为继续查找下一个,两下配合就可以实现由前向后查找了。

那如何由后向前查找呢?很简单,将其中的After参数去掉(即为默认),将SearchDirection参数改成xlPrevious(即搜索方向为向前),后面的FindNext方法改成FindPrevious方法即可。注意After参数的默认值就是所选单元格区域的左上角的单元格,即第1个单元格,这下明白了吧?

Sub 由后向前查找并替换()
    Dim c As Range
    Range("A1:A10").Value = 2
    With Range("a1:a10")
        Set c = .Find(2, After:=.Cells(1), LookIn:=xlValues, LookAt:=xlWhole,
SearchDirection:=xlPrevious)
        Do While Not c Is Nothing
                c.Value = 5
                Set c = .
FindPrevious(c)
        Loop
    End With
End Sub

上面两段代码都用到了条件:not c is nothing,这是什么意思呢?因为find、findnext、findprevious方法都可以返回range对象,若查找不到的话,就返回nothing,故可以利用这点来进行判断,很明显的如果为nothing则说明未查找到指定内容。

菊子曰 写博客,就用菊子曰
posted @ 2011-04-29 16:49  surfacetension  阅读(4834)  评论(0编辑  收藏  举报