在Excel VBA解讀(41)中,我們講解了Find方法,對應(yīng)于Excel中的“查找與替換”對話框中的“查找”選項卡。在本文中,我們將講解Replace方法,對應(yīng)于“查找與替換”對話框中的“替換”選項卡。
“替換”選項卡在“查找”選項卡的基礎(chǔ)上增加了“替換為”組合框和“替換”、“全部替換”2個按鈕,如下圖所示。
使用“替換”功能,可以將指定單元格區(qū)域中查找到的滿足某條件的內(nèi)容替換為指定的值。如下圖所示的工作表,在單元格區(qū)域A1:C5中有很多空單元格,我們利用替換功能,將空單元格全部替換為0,即在“替換為”組合框中輸入0,單擊“全部替換”按鈕。
以上替換瞬間完成!想像一下,如果在成千上萬的數(shù)據(jù)中執(zhí)行這種替換操作,那是多么方便啊!正如在上文圖中所看到的,使用“替換”功能時,實際上同時使用了“查找”功能,并且有很多選項可以讓我們選擇,以執(zhí)行更精確的替換。
現(xiàn)在,讓我們打開宏錄制器,錄制上述操作后的代碼如下:
Sub Macro1()
'
' Macro1 Macro
'
'
Cells.Replace What:='',Replacement:='0', LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False,SearchFormat:=False, ReplaceFormat:=False
End Sub
可以看出,Replace方法的語法如下:
在Find方法中,我們已經(jīng)解釋過了部分參數(shù),下面再簡單地進行說明:
參數(shù)What是必須的,指定想要搜索的字符串。上例中,設(shè)置該參數(shù)為空,即What:=””。
參數(shù)LookAt可選,可以是以下xlLookAt常量之一:xlPart代表匹配搜索文件的任一部分(為默認值),xlWhole代表完全匹配搜索文本。
參數(shù)SearchOrder可選,指定搜索順序,可以是以下xlSearchOrder常量之一:xlByRows(以行的方式搜索,默認值)或xlByColumns(以列的方式搜索)。
參數(shù)MatchCase可選,設(shè)置為True表明搜索時區(qū)分大小寫,默認值為False。
參數(shù)MatchByte可選,是否區(qū)分全角或半角,在選擇或安裝了雙字節(jié)語言時使用。若該參數(shù)為True,則雙字節(jié)字符僅與雙字節(jié)字符相匹配;若該參數(shù)為False,則雙字節(jié)字符可匹配與其相同的單字節(jié)字符。
參數(shù)SearchFormat可選,是否搜索由FindFormat對象指定的格式。
下面是不同于Find方法的參數(shù):
參數(shù)Replacement是必須的,指定要替換掉What參數(shù)指定內(nèi)容的字符串。上例中指定的是0,即用0替換掉空單元格,設(shè)置Replacement:=”0”。
參數(shù)ReplaceFormat可選,是否替換由ReplaceFormat對象指定的格式。
下圖為“替換”對話框中各參數(shù)表示的對應(yīng)的項。
說明:
每次使用該方法時,都會存儲LookAt、SearchOrder、MatchCase和MatchByte的設(shè)置。如果在下次調(diào)用該方法時沒有指定這些參數(shù)的值,將使用先前存儲的值。設(shè)置這些參數(shù)將修改“查找和替換”對話框中的設(shè)置,在“查找和替換”對話框中修改設(shè)置會改變已使用的存儲的值。因此,要避免這些問題,最好每次使用該方法時顯式地設(shè)置這些參數(shù)。
使用這個方法不會改變選擇區(qū)域或者活動單元格。
示例1:用不同的值同時替換不同的區(qū)域
如下圖所示的工作表,需要將單元格區(qū)域A1:B5中的大寫字母“A”替換成“MM”,同時將單元格區(qū)域C1:D5中的“完美Excel”替換成“excelperfect”。
代碼如下:
Sub testReplace1()
Range('A1:B5').ReplaceWhat:='A', Replacement:='MM', MatchCase:=True
Range('C1:D5').ReplaceWhat:='完美Excel', Replacement:='excelperfect'
End Sub
運行后的結(jié)果如下圖。
在代碼中,設(shè)置參數(shù)MatchCase:=True,表明要區(qū)分大小寫,否則小寫字母a也會被替換。
擴展:在了解更多VBA知識后,可以將區(qū)域設(shè)置動態(tài)的,并且可以根據(jù)條件設(shè)置更多的區(qū)域,分別替換不同的值,從而使代碼更靈活。
示例2:替換格式
如下圖所示的工作表,我們根據(jù)不同的內(nèi)容對格式進行不同的操作。
①將加粗格式的單元格變?yōu)榧t色斜體字。代碼如下:
Sub testReplace2()
With Application.FindFormat.Font
.FontStyle = '加粗'
End With
With Application.ReplaceFormat.Font
.FontStyle = '加粗 傾斜'
.Color = 255
End With
Cells.Replace What:='',Replacement:='', _
SearchFormat:=True, _
ReplaceFormat:=True
End Sub
執(zhí)行代碼后的效果如下圖。
②將內(nèi)容為“完美Excel”且加粗格式的單元格變?yōu)榧t色斜體字。代碼如下:
Sub testReplace3()
With Application.FindFormat.Font
.FontStyle = '加粗'
End With
With Application.ReplaceFormat.Font
.FontStyle = '加粗 傾斜'
.Color = 255
End With
Cells.Replace What:='完美Excel',Replacement:='', _
SearchFormat:=True, _
ReplaceFormat:=True
End Sub
執(zhí)行代碼后的效果如下圖。
仔細觀察上述代碼并對比執(zhí)行后的效果,好好體會Replace方法的原理。
說明:
在上面的代碼中,我們看到了兩個新的屬性,分別是Application對象的FindFormat屬性和ReplaceFormat屬性。利用這兩個屬性,配合Replace方法的參數(shù)SearchFormat和參數(shù)ReplaceFormat設(shè)置為True,來搜索滿足條件的格式并將其用相應(yīng)的格式替換。
如果只需要替換格式,那么應(yīng)將參數(shù)What和參數(shù)Replacement都設(shè)置為空。
--------------------------------------
如果您對本文介紹的內(nèi)容還有什么好的示例,歡迎發(fā)送郵件給我:xhdsxfjy@163.com
也可以在本文下方留言,提出您的看法或建議。
本文屬原創(chuàng)文章,轉(zhuǎn)載請聯(lián)系我或者注明出處。