Tengo la siguiente macro en excel:

Sub Macro()
Dim valor As Variant
Dim celda As Range
valor = Application.IfError(Application.VLookup(Range("F2:f430"), Sheets("Hoja1").Range("D2:BC429"), 32, False), _
Application.VLookup(Range("F2:f430"), Sheets("Hoja2").Range("F2:U430"), 16, False))
Range("u2:u430").Value = valor
For Each celda In Range("U2:U430")
If IsError(celda.Value) Then
If celda.Value = CVErr(xlErrNA) Then
celda.Value = ""
End If
End If
Next celda
End Sub

-1 Hoja principal de lista de precios que contiene 2 Hojas del cual se buscan y se extraen datos
-La macro es para actualizar precios, los precios se sustituirán o actualizarán buscando la clave del producto dentro del rango f2:f340 de la Hoja principal y los buscará en la Hoja1 y sino está ahí se va a la Hoja2
En algunas celdas del rango f2:f340 de la hoja principal no tienen clave pero si precio en el rango u2:u340

Al momento de ejecutar la macro me extrae y actualiza sustituyendo el precio en el rango u2:u340... Sino encuentra clave en el rango f2:f340 devuelve un #N/D pero me borra el precio que contenía el producto sin clave de la Hoja principal
¿Cómo agregar condición el cual si en el rango f2:f340 de la Hoja principal que no contengan clave respete o no elimine por un #N/D el precio que contenía inicialmente del rango u2:u340?

2 respuestas

Respuesta
1

Utiliza el método Find para encontrar datos.

Revisa los siguientes ejemplos

https://youtu.be/WI1XrCY50mA 

https://youtu.be/5k0szqErdXg 

Sal u dos

Dante Amor

Respuesta
1

Puedes agregar una condición adicional en tu macro para evitar que se borre el precio en el rango U2:U340 si no se encuentra una clave en el rango F2:F340 de la hoja principal. Aquí tienes el código modificado:

Sub Macro()
    Dim valor As Variant
    Dim celda As Range
    Dim i As Long
    For i = 2 To 340 ' Modifica estos números según el rango de filas que estés utilizando
        If Range("F" & i).Value = "" Then
            Range("U" & i).Value = Range("U" & i).Value ' Mantener el valor actual en el rango U2:U340 si no hay clave en F2:F340
        Else
            valor = Application.IfError(Application.VLookup(Range("F" & i), Sheets("Hoja1").Range("D2:BC429"), 32, False), _
            Application.VLookup(Range("F" & i), Sheets("Hoja2").Range("F2:U430"), 16, False))
            Range("U" & i).Value = valor
        End If
    Next i
    For Each celda In Range("U2:U340") ' Modifica este rango según las filas que estés utilizando
        If IsError(celda.Value) Then
            If celda.Value = CVErr(xlErrNA) Then
                celda.Value = ""
            End If
        End If
    Next celda
End Sub

En este código, se agrega un bucle For que recorre las filas de 2 a 340 (puedes modificar los números según tu rango real). Si una celda en el rango F2:F340 de la hoja principal no tiene clave (valor en blanco), entonces se conservará el precio actual en el rango U2:U340. De lo contrario, se realizará la búsqueda y actualización del precio como lo estabas haciendo anteriormente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas