1

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

情况:

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

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

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

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

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

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

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

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

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

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

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

编辑:

好的,我发现了如何做简单的部分(更换),但我不知道如何不更改已经更改过一次的单元格。这是我的代码:

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 没有做任何事情;/所以已经被替换过的项目仍然被替换!有没有办法以某种方式使这项工作?

4

1 回答 1

3

这是使用您的建议和颜色作为一次性限制器的答案:

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
于 2013-10-16T23:06:29.610 回答