VBA代码根据2个不同列中的条件替换单元格内容

时间:2017-05-19 21:25:47

标签: vba replace cell

我在编写代码时遇到问题。我研究过多个具有类似编码方案的网站,其中一些网站对如何编写此代码提供了一些见解,但它只完成了一半的工作。

所以在Col B中,我有一个路由指南列表:ABC, DEF, GHI 在Col C中,我还有一系列信息:VVV, WWW, XXX, YYY, ZZZ

如果在Col B中显示ABC而Col C显示WWWXXXYYY,则需要将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

谢谢!

1 个答案:

答案 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