基于两个不同列中的条件替换单元格内容的VBA代码

基于两个不同列中的条件替换单元格内容的VBA代码,vba,replace,cell,Vba,Replace,Cell,我写的代码有问题。我曾研究过多个网站,这些网站都有类似的编码方案,其中一些提供了一些关于如何编写代码的见解,但它只完成了一半的工作 因此,在B列中,我有一个路由指南列表:ABC、DEF、GHI 在C列中,我还有一组信息:VVV、WWW、XXX、YYY、ZZZ 如果在B列中显示ABC,而C列显示WWW,XXX或YYY,我需要将C列替换为UUU。下面是我的代码,我提前感谢您的帮助!谢谢大家! Sub Replace_cell () Dim sht As Worksheet Dim fndList

我写的代码有问题。我曾研究过多个网站,这些网站都有类似的编码方案,其中一些提供了一些关于如何编写代码的见解,但它只完成了一半的工作

因此,在B列中,我有一个路由指南列表:
ABC、DEF、GHI
在C列中,我还有一组信息:
VVV、WWW、XXX、YYY、ZZZ

如果在B列中显示
ABC
,而C列显示
WWW
XXX
YYY
,我需要将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

谢谢大家!

您必须依次对每个工作表进行筛选,然后查找/替换,因此循环的嵌套顺序(内部/外部)应该颠倒。同样,正如您所说的,您希望在
列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

感谢@Ambie编辑了这篇文章。不知道为什么我上传代码时看起来不确定。:)非常感谢您更新的代码!我试着运行它,但是loop和replace语句没有用UUU替换fndlist中的语句。当我通过F8运行代码时,它只过滤掉所有内容,只剩下标题,之后什么也不做。谢谢你的帮助@jackie,你说“它只过滤掉所有内容,只剩下标题”,这意味着在B列中没有任何
“ABC”
单元格?代码首先在B列中找到
ABC
,如果单元格
C
fndlist
中,则在这些行中找到它。这就是你的OP所说的,它已经完全测试过了!我再次尝试了代码,今天它运行得非常好!非常感谢你的帮助!(我想我昨天出去跑步后已经筋疲力尽了:D)祝你今天愉快!很高兴你告诉我如何接受答案。我最近刚加入Stackoverflow,所以一直在寻找这个选择。我现在把它变成绿色。:)