Macro de Excel: reemplazar todo el contenido de la celda; reemplace 1 pero no 10, 11, 21, etc.

Macro de Excel: reemplazar todo el contenido de la celda; reemplace 1 pero no 10, 11, 21, etc.

Necesito reemplazar una gran cantidad de números con palabras en una hoja de cálculo de Excel. P.ej:

1 = hello
12 = goodbye
4 = cat

etc. Puedo hacerlo con la búsqueda y reemplazo estándar, pero tengo una lista grande con la que trabajar (alrededor de 240 combinaciones de números/palabras), así que pensé que usaría una macro.

Tengo esto:

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

Pero reemplaza el 1 en 12 por lo que la celda lee hola2 en lugar de adiós. ¿Cómo puedo hacer que afecte solo a las celdas que solo contienen el número específico, de la misma manera que funciona "hacer coincidir el contenido completo de la celda"?

Cualquier ayuda se agradece.

Respuesta1

Cambiar el orden está bien, siempre que se reemplacen todos los valores de la hoja. Si su hoja contenía 11 y no iba a ser reemplazada, cambiar el orden la reemplazará con hello1.
Para usar coincidir con toda la celda, especifique

,LookAt:=xlWhole

como otro parámetro del método Reemplazar. Reemplazar es un método válido en un rango, por lo que su bucle For no es necesario. En su lugar puedes especificar

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

Respuesta2

No estoy seguro de si existe una solución mejor, pero lo que eso me dice es ponerlas en orden inverso. Por ejemplo:

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

En ese caso, 12 sería reemplazado primero por "adiós", y cuando aparezca la línea que reemplaza 1 por "hola", ya habría cambiado.

Nuevamente, probablemente haya una solución mejor, pero creo que funcionaría para una solución rápida en los parámetros que describió.

información relacionada