Excel 宏:替换整个单元格内容;替换 1,但不替换 10、11、21 等

Excel 宏:替换整个单元格内容;替换 1,但不替换 10、11、21 等

我需要在 Excel 电子表格中用文字替换大量数字。例如:

1 = hello
12 = goodbye
4 = cat

等等。我可以使用标准搜索和替换来完成此操作,但我有一个很大的列表需要处理(大约 240 个数字/单词组合),所以我想我会使用宏。

我有这个:

Sub findreplacer()
For Each mycell In Range("A1:A1000")
mycell.Replace What:="1", Replacement:="hello"
mycell.Replace What:="12", Replacement:="goodbye"
mycell.Replace What:="4", Replacement:="cat"
Next

End Sub

但是它替换了 12 中的 1,因此单元格显示的是 hello2 而不是 goodbye。我怎样才能让它只影响仅包含特定数字的单元格,就像“匹配整个单元格内容”一样?

任何帮助均感激不尽。

答案1

更改顺序是可以的,只要工作表中的每个值都将被替换即可。如果您的工作表包含 11,但不会被替换,那么更改顺序仍会将其替换为 hello1。
要使用匹配整个单元格,请指定

,LookAt:=xlWhole

作为 Replace 方法的另一个参数。Replace 是 Range 上的有效方法,因此不需要 For 循环。您可以改为指定

Range("A1:A1000").Replace What:="12", Replacement:="goodbye", LookAt:=xlWhole  
Range("A1:A1000").Replace What:="4", Replacement:="cat", LookAt:=xlWhole

答案2

我不确定是否有更好的解决方案,但我认为应该将它们按相反的顺序排列。例如:

Sub findreplacer()
For Each mycell In Range("A1:A1000")
mycell.Replace What:="12", Replacement:="goodbye"
mycell.Replace What:="4", Replacement:="cat"
mycell.Replace What:="1", Replacement:="hello"
Next

End Sub

在这种情况下,12 将首先被“goodbye”替换,而当出现将 1 替换为“hello”的行时,它就已经改变了。

再次,可能存在更好的解决方案,但我认为这可以快速修复您描述的参数。

相关内容