Problema al buscar y reemplazar un rango con macro?

Para Dante Amor

Ingeniero Dante acudo a su valiosa ayuda como siempre, esperando ante todo su buen estado de salud.

En una serie de datos ordenadas tipo base de datos, no deseo copiar valores con valor "0" en su defecto que me deje la celda vacía, para lo cual ejecuto una macro de buscar y reemplazar, el problema me surge es que al encontrar un registro con valor "10" este me deja el dato en "1", lo cual genera un error de integridad de valores.

u = Range("A" & Rows.Count).End(xlUp).Row  
Range("A2:A" & un).Replace What:="0", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

Al usar la anterior instrucción estos son los resultados

3 Respuestas

Respuesta
2

Muy correcta la solución enviada por Adriel Ortiz Mangia.

Otra opción, si no te importa ocultar ceros en el resto de la hoja, es quitando el tilde a la opción desde menú Archivo u Opciones de Excel, tal como se observa en la imagen.

Respuesta
5

[Hola Paco, estoy bien de salud, gracias por preguntar. Igualmente deseo que te encuentres bien.

En tu macro veo un detalle:

La variable se llama "u" y en el rango tienes "un"

Ese tipo de errores podrían verificarse si al inicio del código utilizas la instrucción "Option Explicit", esta instrucción te obliga a declarar todas las variables. Además si declaras de manera adecuada las variables tendrás otros beneficios, como utilizar menos memoria, si no declaras las variables, todas se declaran como tipo Variant.

Ejemplo de utilización de Option Explicit:

Cuando ejecutas la macro, si no has declarado una variable te envía el siguiente mensaje:

De esa manera podrás ver que los nombres de variable no están correctos.

El parámetro xlPart significa que va a buscar si coincide parcialmente con el texto de la celda. El parámetro xlWhole significa que debe coincidir con el contenido de toda la celda.

Entonces quedaría así.

Option Explicit
Sub macro()
  Dim u As Long
  u = Range("A" & Rows.Count).End(xlUp).Row
  Range("A2:A" & u).Replace What:="0", Replacement:="", LookAt:=xlWhole, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
Respuesta
2

Cambia xlpart por xlwhole

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas