VBA Excel查找和替换而不替换已替换的项

VBA Excel查找和替换而不替换已替换的项,vba,excel,Vba,Excel,我正在寻找一个excel脚本,可以找到和替换数据,但出于对一切的热爱,我无法想出如何编写它 情况: A-------B-------C 猫------狗------香蕉 狗------鱼------苹果 鱼------猫------橙 因此,宏将查看B列中某个单元格中的数据,然后查看C列中相邻的单元格,并将a列中该数据的所有实例替换为C列中的“如果找到”实例。因此,结果将是: A-------B-------C 橙色------狗------香蕉 香蕉------鱼------苹果 苹果----

我正在寻找一个excel脚本,可以找到和替换数据,但出于对一切的热爱,我无法想出如何编写它

情况:

A-------B-------C

猫------狗------香蕉

狗------鱼------苹果

鱼------猫------橙

因此,宏将查看B列中某个单元格中的数据,然后查看C列中相邻的单元格,并将a列中该数据的所有实例替换为C列中的“如果找到”实例。因此,结果将是:

A-------B-------C

橙色------狗------香蕉

香蕉------鱼------苹果

苹果------猫------橙色

但这还不是全部,我希望它不要改变一个已经改变过一次的单元格!(我正在尝试改变背景颜色)

有什么帮助吗?我完全不知所措

编辑:

好吧,我找到了如何做简单的部分(更换),但我无法找到如何不更改已经更改过一次的单元格。这是我的密码:

Sub multiFindNReplace()
    Dim myList, myRange
    Set myList = Sheets("sheet1").Range("A2:B3") 'two column range where find/replace pairs are
    Set myRange = Sheets("sheet1").Range("D2:D5") 'range to be searched
    For Each cel In myList.Columns(1).Cells
    myRange.Replace what:=cel.Value, replacement:=cel.Offset(0, 1).Value, ReplaceFormat:=True
    Next cel
End Sub
据我所知,ReplaceFormat:=True
什么都不做;/因此,已经更换过的物品仍在更换中!有什么方法可以让这项功能发挥作用吗?

以下是使用您推荐的颜色作为一次性限制器的答案:

Sub Replace_Once()

'Find last row using last cell in Column B
LastRow = Range("B" & Rows.Count).End(xlUp).Row

'Clear colors in Column A
Range("A1:A" & LastRow).Interior.ColorIndex = xlNone

'Look at each cell in Column B one at a time (Cel is a variable)
For Each Cel In Range("B1:B" & LastRow)
    'Compare the cell in Column B with the Value in Column A one at a time (C is a variable)
    For Each C In Range("A1:A" & LastRow)
        'Check if the Cell in Column A matches the Cell in Column B and sees if the color has changed.
        If C.Value = Cel.Value And C.Interior.Color <> RGB(200, 200, 200) Then
            'Colors the cell
            C.Interior.Color = RGB(200, 200, 200)
            'Updates the value in Column A with the cell to the right of the Cell in Column B
            C.Value = Cel.Offset(0, 1).Value
        End If
    Next
Next

'Uncomment the line below to remove color again
'Range("A1:A" & LastRow).Interior.ColorIndex = xlNone

End Sub
Sub Replace_Once()
'使用列B中的最后一个单元格查找最后一行
LastRow=范围(“B”和Rows.Count).End(xlUp).Row
'清除A列中的颜色
范围(“A1:A”&LastRow).Interior.ColorIndex=xlNone
'每次查看B列中的每个单元格(Cel是一个变量)
对于范围内的每个Cel(“B1:B”和最后一行)
'将B列中的单元格与A列中的值逐一进行比较(C是一个变量)
对于范围内的每个C(“A1:A”和最后一行)
'检查A列中的单元格是否与B列中的单元格匹配,并查看颜色是否已更改。
如果C.Value=Cel.Value和C.Interior.Color RGB(200200200),则
“给电池上色
C.Interior.Color=RGB(200200200)
'使用列B中单元格右侧的单元格更新列A中的值
C.值=单元偏移量(0,1).值
如果结束
下一个
下一个
'取消注释下面的行以再次删除颜色
'范围(“A1:A”&LastRow).Interior.ColorIndex=xlNone
端接头

谢谢您的回答!我还是VBA新手,所以我理解这段代码有困难。正在更改哪一行,以及正在使用哪一行来更改该行?代码是否已清除?你也可以通过反复按F8键在每一行中穿行来测试它,并观察正在发生的事情。这真是太棒了!由于某些原因,该范围(“B1:B”和LastRow)似乎不起作用。当我将其更改为特定范围时,它就像一个符咒,但当它使用LastRow时,它似乎不起作用。编辑:找出原因,当B列的长度与A列的长度不同时,它不会将宏应用于A列长度大于B列的部分。是否有可能绕过此问题?@LeMarcin当您使用
F8
键单步查看代码时,赋值后
lastRow
的值是多少?B列的长度是多少(在我的测试264中,A列是3650[重复项目的分配])编辑:哦,对了,我刚刚意识到我可以更改这个设置,使我的making LastRow=Range(“B”&Rows.Count)。End(xlUp)。Row使用A而不是B