我在编写代码时遇到问题。我研究过多个具有类似编码方案的网站,其中一些网站对如何编写此代码提供了一些见解,但它只完成了一半的工作。
所以在Col B中,我有一个路由指南列表:ABC, DEF, GHI
在Col C中,我还有一系列信息:VVV, WWW, XXX, YYY, ZZZ
。
如果在Col B中显示ABC
而Col C显示WWW
,XXX
或YYY
,则需要将Col C替换为UUU
。以下是我的代码,我提前感谢您的帮助!谢谢!
Sub Replace_cell ()
Dim sht As Worksheet
Dim fndList As Variant
Dim rplcList As Variant
Dim x As Long
'Filter ABC only on Routing Column B
Selection.AutoFilter
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:= _
"ABC"
'Find WWW, XXX, YYY in Col C and replace them with UUU
fndList = Array("WWW", "XXX", "YYY")
rplcList = ("UUU")
'Loop through each item in Array lists
For x = LBound(fndList) To UBound(fndList)
'Loop through each worksheet in ActiveWorkbook
For Each sht In ActiveWorkbook.Worksheets
sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next sht
Next x
End Sub
谢谢!
答案 0 :(得分:1)
您必须依次对每个工作表进行过滤,然后查找/替换,因此应该颠倒循环的嵌套顺序(内部/外部)。另外正如您所说,您希望替换Column C
,而不是工作表的所有单元格。
Sub Replace_colC()
Dim sht As Worksheet, x As Long, fndList, rplcList
fndList = Array("WWW", "XXX", "YYY")
rplcList = Array("UUU", "UUU", "UUU")
' though replacement values are the same, they could be different
For Each sht In ActiveWorkbook.Worksheets
'Filter ABC on Routing Column B
sht.Cells.AutoFilter Field:=2, Criteria1:="ABC"
'Loop through each item in Array lists and replace
For x = LBound(fndList) To UBound(fndList)
sht.UsedRange.Columns("C").Replace What:=fndList(x), Replacement:=rplcList(x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next x
sht.AutoFilterMode = False
Next sht
End Sub