[英]find and replace for specific range in VBA
我正在使用以下代碼來查找curr_symbol並將其替換為new_symbol。 即使我在代碼中指定了應該在特定的行號內執行此操作,它也會將查找和替換應用於所選工作表中的所有行,這不是我想要的。
Sub find_replace()
Dim curr_symbol, new_symbol As String
Dim row_num, last_row As Integer
row_num = ActiveSheet.Cells(1, "A").Value 'row_num=9
last_row = ActiveSheet.Cells(2, "A").Value 'last_row=11
Do While row_num < last_row
curr_symbol = ".ABC130301"
new_symbol = ActiveSheet.Cells(row_num, "E").Value 'new_symbol=".BAC130306"
With ActiveSheet.UsedRange
.Replace curr_symbol, new_symbol, xlPart
End With
row_num = row_num + 1
Loop
End Sub
我什至嘗試With ActiveSheet.UsedRange....End With
以下語句替換With ActiveSheet.UsedRange....End With
,但這也替換了所有行中的curr_symbol。
ActiveSheet.Cells.Replace What:=curr_symbol, Replacement:=new_symbol, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
如何解決此問題,使其僅替換指定行中的字符串。
我假設您有興趣替換的范圍是A列,從row_num
到last_row
。 嘗試替換此:
With ActiveSheet.UsedRange
.Replace curr_symbol, new_symbol, xlPart
End With
有了這個:
Cells(row_num, 1).Replace curr_symbol, new_symbol, xlPart
無論您將ActiveSheet.UsedRange
放在何處,它都始終引用活動工作表的整個已使用區域。 它是一個包含所有使用的單元格以及與使用的單元格相同的行和列中的其他單元格的集合。 它與您使用它的方式無關(即,它不引用與您的循環相關的范圍)。 Replace
方法將應用於UsedRange
中的每個單個單元格。
與ActiveSheet.Cells
類似; 這始終是指活動工作表中每個單元格的集合。 我的建議與ActiveSheet.Cells(row_num, 1)
,它指定一個單獨的單元格來應用Replace
方法。
不再回答您的問題:
順便說一句,以下行:
Dim curr_symbol, new_symbol As String
將curr_symbol聲明為Variant,將new_symbol聲明為String。 下一行聲明(整數)也是如此。 不,我也不喜歡這種聲明行為。 您必須為每個變量指定一種類型。 我傾向於這樣聲明:
Dim curr_symbol As String, _
new_symbol As String
此外,Excel在內部將所有Integer類型存儲為Long類型。 聲明為Integer僅限制其值,而不限制其消耗的內存量。 除非您特別想限制整數的值,否則建議將所有Integer聲明都更改為Long:
Dim last_row As Integer
就像消耗內存一樣:
Dim row_num as Long
但是,如果完全沒有速度差異,可能會稍微慢一些。
您正在使用的“ UsedRange”范圍是所使用的整個電子表格。 您的替換將應用於整個電子表格。
我將創建一個您要替換的范圍,例如:
Dim MyRange as Range
Set MyRange = Range("B7:C9")
然后,我將在此范圍內進行替換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.