Macro do Excel: Substitua o conteúdo da célula enitre; substituir 1 mas não 10, 11, 21 etc

0

Eu preciso substituir uma grande quantidade de números por palavras em uma planilha do Excel. Por exemplo:

1 = hello
12 = goodbye
4 = cat

Eu posso fazer isso com a pesquisa padrão e substituir, mas eu tenho uma lista grande para trabalhar (cerca de 240 combos de número / palavra), então eu imaginei que eu usaria uma macro.

Eu tenho isso:

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 ele substitui o 1 em 12, então a célula lê o hello2 em vez do adeus. Como posso fazer com que isso afete apenas as células que contêm apenas o número específico, a maneira como 'corresponde ao conteúdo da célula inteira' funciona?

Qualquer ajuda apreciada.

    
por user65678 01.02.2011 / 20:04

2 respostas

5

Mudar a ordem é bom, desde que todos os valores da folha sejam substituídos. Se sua planilha contivesse 11, o que não seria substituído, a alteração da ordem ainda a substituirá por hello1.
Para usar a célula inteira da correspondência, especifique

,LookAt:=xlWhole

como outro parâmetro para o método Replace. Substituir é um método válido em um intervalo, portanto, o loop For não é necessário. Você pode especificar

Range("A1:A1000").Replace What:="12", Replacement:="goodbye", LookAt:=xlWhole  
Range("A1:A1000").Replace What:="4", Replacement:="cat", LookAt:=xlWhole
    
por 01.02.2011 / 20:37
1

Não tenho certeza se existe uma solução melhor, mas o que isso diz na minha mente é colocá-los 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 seriam substituídos por "adeus" primeiro, e quando a linha que substitui 1 por "olá" aparecer, ela já teria mudado.

Novamente, provavelmente há uma solução melhor, mas acho que isso funcionaria para uma correção rápida nos parâmetros que você descreveu.

    
por 01.02.2011 / 20:13