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.
2 Respuestas
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
- Compartir respuesta
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.
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.
- Compartir respuesta