Como realizar una Macro buscar y reemplazar?

Cada mes me envían una base de datos en la cual en algunas columnas vienen ciertos números, pero seso números representan algo, por ejemplo el 2 quiere decir casa o apartamento, quisiera poder hacer una macro en la cual me reemplace ese dos por casa o apartamento que esta en otra hoja del libro. Hacerlo manualmente me lleva mucho tiempo.

Respuesta
1

Lo puedes hacer con un SI() o con un BuscarV(), no veo necesario una macro, si gustas envía imagen para poder ayudar mejor.

Buenos días, gracias por su respuesta, mi archivo se compone de 121 columnas y 22900 filas mas o menos, en 80 columnas debo reemplazar dichos números que pueden ir en algunas columnas del 0 hasta el 9 siendo cada numero una opción que tengo en otra hoja del libro, por ejemplo el 2 reemplazarlo por "casa o apartamento" en la columna CW pero ese mismo 2 en otra columna puede que tenga que reemplazarlo por "rió o quebrada". Adjunto imágenes, hacerlo con BuscaV es muy tedioso cada mes debido al alto volumen de información.

no veo las imágenes...

Gracias

Prueba lo siguiente:

Debes remplazar los nombres de los libros y las hojas por las que tu necesitas, así como en la función Vlookup cambiar el valor de la columna por la que necesites. Eso es todo lo que te puedo ayudar con las imágenes que envías.

Sub Buscar()
Dim Lastrow As Long, i As Long
Windows("NombreArchivo.xlsm").Activate
  Lastrow = Range("B" & Rows.Count).End(xlUp).Row
    Sheets("Hoja1").Select

'Es posible que debas añadir columnas para hacer la búsqueda, o puedes hacer la búsqueda en el final de las columnas y luego las remonbras

   For i = 2 To Lastrow
On Error Resume Next
a = Application.WorksheetFunction.VLookup(Cells(i, 1), Workbooks("Ordenes.xls").Worksheets("Sheet1").Range("$D$2:$T$60000"), 7, 0)
If a = Empty Then
Cells(i, 11).Value = 0
Else
Cells(i, 11) = WorksheetFunction.VLookup(Cells(i, 1), Workbooks("Ordenes.xls").Worksheets("Sheet1").Range("$D$2:$T$60000"), 7, 0)
End If
Next i

'Aquí puedes seguir agregando Buscarv (Vlookup) y colocas más variables c, d... etc

 For i = 2 To Lastrow
On Error Resume Next
b = Application.WorksheetFunction.VLookup(Cells(i, 1), Workbooks("Ordenes.xls").Worksheets("Sheet1").Range("$D$2:$T$60000"), 7, 0)
If b = Empty Then
Cells(i, 12).Value = 0
Else
Cells(i, 12) = WorksheetFunction.VLookup(Cells(i, 1), Workbooks("Ordenes.xls").Worksheets("Sheet1").Range("$D$2:$T$60000"), 7, 0)
End If
Next i

End Sub

Para ayudarte más podrías enviar el archivo y lo que requieres buscar y reemplazar para poder ayudarte mejor.

Si te sirvió dale manito arriba.

1 respuesta más de otro experto

Respuesta
1

Podrías poner una imagen para ver la estructura de la hoja original, para ver en qué columna y en cuáles filas puede aparecer el "2"

Y en otra imagen el resultado que tu quieres.

Buenos días, gracias por su respuesta, mi archivo se compone de 121 columnas y 22900 filas mas o menos, en 80 columnas debo reemplazar dichos números que pueden ir en algunas columnas del 0 hasta el 9 siendo cada numero una opción que tengo en otra hoja del libro, por ejemplo el 2 reemplazarlo por "casa o apartamento" en la columna CW pero ese mismo 2 en otra columna puede que tenga que reemplazarlo por "rió o quebrada". Adjunto imágenes

Por ejemplo el 2 reemplazarlo por "casa o apartamento" en la columna CW pero ese mismo 2 en otra columna puede que tenga que reemplazarlo por "rió o quebrada"

Podrías explicarlo de otra manera.

Responde puntualmente lo siguiente y en este orden:

1. En la columna CW reemplazar el 2 por "casa o departamento". Si o No?

2. En la columna "cuál columna" reemplazar el 2 por "rio o quebrada". ¿Cuál columna?

3. Solamente necesitas eso. Si o No?

4. O tienes un catálogo de número y su respectivo texto a reemplazar.  Si o No?

5. Si tienes una tabla o catálogo, es algo como esto:

Columna CW. Reemplazar 0 por "texto a"

Columna CW. Reemplazar 1 por "texto jaja"

Columna CW. Reemplazar 2 por "casa o departamento"

etc.etc.etc.

Si tienes una tabla, entonces podrías poner un ejemplo de esa tabla más completa.


Si pretendes que te haga una macro para un solo caso:

Por ejemplo el 2 reemplazarlo por "casa o apartamento" en la columna CW

Y después tú quieres agregar a la macro los otros casos, no lo considero muy práctico.

¿Digamos qué tienes 20 casos, entonces vas a realizar el mismo código 20 veces?


Si es un solo caso, no necesitas una macro, solamente selecciona la columna DW, presiona Cotrol L, en buscar escribe 2 y en reemplazar escribe "casa o apartamento".

De hecho la macro para hacer lo anterior es:

Sub Macro2()
  Columns("DW:DW").Replace What:="2", Replacement:="casa o apartamento", LookAt:=xlWhole
End Sub

Si tienes otras columnas, otros números y tú quieres hacerlo, te pongo otro ejemplo:

Sub Macro2()
  Columns("DW:DW").Replace What:="2", Replacement:="casa o apartamento", LookAt:=xlWhole
  Columns("DX:DX").Replace What:="2", Replacement:="rio o quebrada", LookAt:=xlWhole
End Sub

Gracias por su respuesta, así voy y me esta funcionando.

Sub ACTUALIZAR()
Columns("E:E").Replace What:="1", Replacement:="URBANO", LookAt:=xlWhole
Columns("E:E").Replace What:="2", Replacement:="RURAL", LookAt:=xlWhole
Columns("E:E").Replace What:="3", Replacement:="CENTRO POBLADO", LookAt:=xlWhole

Columns("G:G").Replace What:="1", Replacement:="CEDULA", LookAt:=xlWhole
Columns("G:G").Replace What:="2", Replacement:="TARJETA DE IDENTIDAD", LookAt:=xlWhole
Columns("G:G").Replace What:="3", Replacement:="CEDULA DE EXTRANJERIA", LookAt:=xlWhole
Columns("G:G").Replace What:="4", Replacement:="REGISTRO CIVIL", LookAt:=xlWhole
Columns("G:G").Replace What:="5", Replacement:="PEP", LookAt:=xlWhole
Columns("G:G").Replace What:="6", Replacement:="CENTRO POBLADO", LookAt:=xlWhole
Columns("G:G").Replace What:="7", Replacement:="SM", LookAt:=xlWhole
Columns("G:G").Replace What:="8", Replacement:="PEP", LookAt:=xlWhole

Columns("O:O").Replace What:="1", Replacement:="SI", LookAt:=xlWhole
Columns("O:O").Replace What:="2", Replacement:="NO", LookAt:=xlWhole

Columns("P:P").Replace What:="1", Replacement:="SI", LookAt:=xlWhole
Columns("P:P").Replace What:="2", Replacement:="NO", LookAt:=xlWhole

Columns("R:R").Replace What:="1", Replacement:="SI", LookAt:=xlWhole
Columns("R:R").Replace What:="2", Replacement:="NO", LookAt:=xlWhole

Columns("S:S").Replace What:="1", Replacement:="SI", LookAt:=xlWhole
Columns("S:S").Replace What:="2", Replacement:="NO", LookAt:=xlWhole

Columns("W:W").Replace What:="0", Replacement:="NINGUNA", LookAt:=xlWhole
Columns("W:W").Replace What:="1", Replacement:="ISS", LookAt:=xlWhole
Columns("W:W").Replace What:="2", Replacement:="REGIMEN ESPECIAL", LookAt:=xlWhole
Columns("W:W").Replace What:="3", Replacement:="EPS CONTRIBUTIVA", LookAt:=xlWhole
Columns("W:W").Replace What:="4", Replacement:="EPS SUBSIDIADA", LookAt:=xlWhole

Columns("X:X").Replace What:="0", Replacement:="NO TIENE", LookAt:=xlWhole
Columns("X:X").Replace What:="1", Replacement:="DE USO EXCLUSIVO PARA EL HOGAR", LookAt:=xlWhole
Columns("X:X").Replace What:="2", Replacement:="COMPARTIDA CON OTROS HOGARES", LookAt:=xlWhole

Columns("Y:Y").Replace What:="0", Replacement:="EN NINGUNA PARTE", LookAt:=xlWhole
Columns("Y:Y").Replace What:="1", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
Columns("Y:Y").Replace What:="2", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
Columns("Y:Y").Replace What:="3", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
Columns("Y:Y").Replace What:="4", Replacement:="EN UN ESPACIO NO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
Columns("Y:Y").Replace What:="5", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
Columns("Y:Y").Replace What:="6", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole

Columns("Z:Z").Replace What:="1", Replacement:="SI", LookAt:=xlWhole
Columns("Z:Z").Replace What:="2", Replacement:="NO", LookAt:=xlWhole
End Sub

Si pretendes que te haga una macro para un solo caso:

Y después tú quieres agregar a la macro los otros casos, no lo considero muy práctico.

¿Digamos qué tienes 20 casos, entonces vas a realizar el mismo código 20 veces?

¿Quieres qué te ayude a optimizar el código?

Buenas noches Dante, así lo termine y me funciono en toda la base,  cada vez que me llega la base en archivo de texto la transfiero a Excel y ejecuto esa macro, pero si de pronto se puede optimizar el código de otra forma le agradezco mucho.

Este es un patrón que encontré para poder minimizar el código:

Sub Actualiza_1()
  Dim sCol As Variant, i As Long
  '
  sCol = Array("O", "P", "R", "S", "Z")
  For i = 0 To UBound(sCol)
    Columns(sCol(i)).Replace What:="1", Replacement:="SI", LookAt:=xlWhole
    Columns(sCol(i)).Replace What:="2", Replacement:="NO", LookAt:=xlWhole
  Next
  '
  Columns("E:E").Replace What:="1", Replacement:="URBANO", LookAt:=xlWhole
  Columns("E:E").Replace What:="2", Replacement:="RURAL", LookAt:=xlWhole
  Columns("E:E").Replace What:="3", Replacement:="CENTRO POBLADO", LookAt:=xlWhole
  '
  Columns("G:G").Replace What:="1", Replacement:="CEDULA", LookAt:=xlWhole
  Columns("G:G").Replace What:="2", Replacement:="TARJETA DE IDENTIDAD", LookAt:=xlWhole
  Columns("G:G").Replace What:="3", Replacement:="CEDULA DE EXTRANJERIA", LookAt:=xlWhole
  Columns("G:G").Replace What:="4", Replacement:="REGISTRO CIVIL", LookAt:=xlWhole
  Columns("G:G").Replace What:="5", Replacement:="PEP", LookAt:=xlWhole
  Columns("G:G").Replace What:="6", Replacement:="CENTRO POBLADO", LookAt:=xlWhole
  Columns("G:G").Replace What:="7", Replacement:="SM", LookAt:=xlWhole
  Columns("G:G").Replace What:="8", Replacement:="PEP", LookAt:=xlWhole
  '
  Columns("W:W").Replace What:="0", Replacement:="NINGUNA", LookAt:=xlWhole
  Columns("W:W").Replace What:="1", Replacement:="ISS", LookAt:=xlWhole
  Columns("W:W").Replace What:="2", Replacement:="REGIMEN ESPECIAL", LookAt:=xlWhole
  Columns("W:W").Replace What:="3", Replacement:="EPS CONTRIBUTIVA", LookAt:=xlWhole
  Columns("W:W").Replace What:="4", Replacement:="EPS SUBSIDIADA", LookAt:=xlWhole
  '
  Columns("X:X").Replace What:="0", Replacement:="NO TIENE", LookAt:=xlWhole
  Columns("X:X").Replace What:="1", Replacement:="DE USO EXCLUSIVO PARA EL HOGAR", LookAt:=xlWhole
  Columns("X:X").Replace What:="2", Replacement:="COMPARTIDA CON OTROS HOGARES", LookAt:=xlWhole
  '
  Columns("Y:Y").Replace What:="0", Replacement:="EN NINGUNA PARTE", LookAt:=xlWhole
  Columns("Y:Y").Replace What:="1", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
  Columns("Y:Y").Replace What:="2", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
  Columns("Y:Y").Replace What:="3", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
  Columns("Y:Y").Replace What:="4", Replacement:="EN UN ESPACIO NO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
  Columns("Y:Y").Replace What:="5", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
  Columns("Y:Y").Replace What:="6", Replacement:="EN UN ESPACIO EXCLUSIVO PARA COCINAR", LookAt:=xlWhole
End Sub

Dante buenos días, le envío un archivo de como me quedo la macro con todas las modificaciones que necesito, el nuevo patrón que me envió no lo entendí, la que le envío funciona muy bien muchas gracias.

En lo sucesivo, utiliza el icono para insertar código

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas