¿Porqué no funciona esta "sencilla" macro de Excel?

Necesito una macro de excel que haga, en un mismo libro y para office 365, que en la Hoja FUSIÓN, busque en la columna N, para valores de celda >0, si alguno de esos valores coincide con un valor en la columna L de la Hoja REGISTRO, y si coincide devolver el valor de la celda F, en esa misma fila de la Hoja REGISTRO, en la columna B de la Hoja FUSIÓN, en la fila correspondiente al valor comparado.

Sub MatchValues()

Dim lastRow1 As Long
Dim lastRow2 As Long
Dim i As Long

lastRow1 = Sheets("REGISTRO").Range("L" & Rows.Count).End(xlUp).Row
lastRow2 = Sheets("FUSIÓN").Range("N" & Rows.Count).End(xlUp).Row

For i = 2 To lastRow2
If Sheets("FUSIÓN").Range("N" & i).Value > 0 Then
Sheets("FUSIÓN").Range("B" & i).Value = Application.VLookup(Sheets("FUSIÓN").Range("N" & i).Value, _
Sheets("REGISTRO").Range("L1:F" & lastRow1), 3, False)
End If
Next i
End Sub

Pues bien, al ejecutarla, me devuelve #N/D en las celdas correctas donde existe el match. Lo repaso una y otra vez, y no encuentro el error. Existen coincidencias en las columnas N de FUSIÓN y en la L de REGISTRO, son campos de la misma forma y las columnas citadas son correctas. ¿Qué puedo estar haciendo mal?

Respuesta

Hay varias posibles causas de que esta macro devuelva "#N/D":

  1. La función VLookup está buscando un valor en la columna L de la hoja "REGISTRO" que no existe en la columna N de la hoja "FUSIÓN". Verifica que los valores que está comparando realmente existan en ambas hojas.

  2. La función VLookup está buscando un valor que está formateado de manera diferente en ambas hojas. Por ejemplo, si un valor en la columna N de la hoja "FUSIÓN" es un número entero y el mismo valor en la columna L de la hoja "REGISTRO" está formateado como texto, la función VLookup no encontrará la coincidencia. Verifica que los valores estén formateados de manera consistente.

  3. La función VLookup está buscando en el rango incorrecto en la hoja "REGISTRO". Verifica que la segunda entrada de la función VLookup (Sheets("REGISTRO"). Range("L1:F" & lastRow1)) está apuntando al rango correcto en la hoja "REGISTRO" que contiene los valores con los que deseas comparar.

  4. La columna F de la hoja "REGISTRO" no contiene valores en las filas correspondientes a las filas con valores mayores que cero en la columna N de la hoja "FUSIÓN". Verifica que la columna F de la hoja "REGISTRO" contiene valores en todas las filas correspondientes a las filas con valores mayores que cero en la columna N de la hoja "FUSIÓN".

Si sigues teniendo problemas, puedes intentar agregar Debug. Print statements para imprimir valores intermedios en la macro y ayudar a identificar dónde está fallando la lógica. Por ejemplo, puedes agregar Debug. Print Sheets("FUSIÓN").Range("N" & i).Value justo antes de la línea con la función VLookup para imprimir el valor que está buscando en ese momento. Esto puede ayudarte a ver si el problema está en el valor que está buscando o en otro lugar en la macro.

2 respuestas más de otros expertos

Respuesta

Leyendo tu fórmula veo que buscas la 3ra columna en el rango L:F.

Intenta cambiarlo a Range("F1:L" & lastRow1) y ajusta el 3er argumento (3) si hiciera falta.

*Te invito a mirar el video Nª 29 de mi canal: 3 Métodos de búsqueda, entre ellos el más recomendado: FIND

Respuesta

Visita:

Cursos de Excel y Macros

Por Dante Amor

----- --

Utiliza el método Find para buscar datos, en el siguiente vídeo explico las ventajas:

Curso de macros. Metodo find completo. - YouTube

Recomendación:

Curso de macros. Metodo find ejemplos. - YouTube

Curso de macros. Consejos para empezar a programar. - YouTube

----- --

Cargar combobox - YouTube

Sal u dos Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas