Preciso substituir uma grande quantidade de números por palavras em uma planilha do Excel. Por exemplo:
1 = hello
12 = goodbye
4 = cat
Posso fazer isso com a pesquisa e substituição padrão, mas tenho uma lista grande para trabalhar (cerca de 240 combinações de números/palavras), então decidi usar uma macro.
Eu tenho isto:
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
Mas substitui 1 em 12 para que a célula leia hello2 em vez de adeus. Como posso fazer com que isso afete apenas as células que contêm apenas o número específico, da mesma forma que funciona a 'correspondência ao conteúdo inteiro da célula'?
Qualquer ajuda será apreciada.
Responder1
Não há problema em alterar a ordem, desde que todos os valores da planilha sejam substituídos. Se a sua planilha continha 11, mas isso não seria substituído, a alteração do pedido ainda a substituirá por hello1.
Para usar a correspondência de célula inteira, especifique
,LookAt:=xlWhole
como outro parâmetro para o método Replace. Substituir é um método válido em um intervalo, portanto seu loop For não é necessário. Em vez disso, você pode especificar
Range("A1:A1000").Replace What:="12", Replacement:="goodbye", LookAt:=xlWhole
Range("A1:A1000").Replace What:="4", Replacement:="cat", LookAt:=xlWhole
Responder2
Não tenho certeza se existe uma solução melhor, mas o que isso diz em minha mente é colocá-las na ordem inversa. Por exemplo:
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
Nesse caso, 12 seria substituído primeiro por “adeus”, e quando a linha que substitui 1 por “olá” aparecer, ela já teria mudado.
Novamente, provavelmente existe uma solução melhor, mas acho que funcionaria para uma solução rápida nos parâmetros que você descreveu.