Microsoft Excel me genera error de compilación y me señala el primer vlookup

La pregunta anterior era por el if que ya lo tengo solucionado, ahora el problema y el error emitido es diferente, me puedes ayudar, he estado navegando en buscando pero nada como lo que quiero hacer.
Me genera error de compilación no se ha definido sub o función y me señala el primer vlookup
A = Application.WorksheetFunction.IF(Range("O3") ="", .IF(IsError(VLookup(Range("N3"), Range("tipo"), 2, 0)), "", VLookup(Range("N3"), Range("tipo"), 2, 0)), O3)
Necesito asignarle el valor a la variable, lo he hecho con fórmulas más sencillas pero ya con esta, estoy liado. Gracias

1 respuesta

Respuesta
1
Esta programando allí como si estuvieses en la celda de una hoja
Yo te propondría lo siguiente
Sub busca()
Dim valor As String
Dim Rng As Range
If Range("o3") = "" Then
valor = Range("N3")
With Sheets("Hoja1").Range("A:A")
Set Rng = .Find(What:=valor, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Rng Is Nothing Then
A = ""
Else
Rng.Select
A = ActiveCell.Offset(0, 1)
End If
End With
Else
A = Range("o3")
End If
End Sub
Pruébalo y me avisas
Olvide comentarte que debes cambiar el rango por la columna donde harás la búsqueda. Tu rango de la pregunta es tipo.
Cambia A:A por la primera columna de ese rango
Matador, lamento no haberme explicado bien, el código lo tengo hecho y funciona correctamente, pero como lo había hecho con prisa, ahora estoy reduciéndolo un poco y estilizando. Quiero poner el valor en una variable, tomar este valor y ponerlo en la celda que le toca a ver si me puedo explicar mejor:
>> Así lo tengo ahora y me escribe la fórmula en la hoja:
range("xn") = "=VLOOKUP(R[-1]C[1],tipo,2,0)"
>> de esta forma me dejaria solamente el valor, que es lo que deseo:
A = Application.WorksheetFunction.VLookup(Range("I8"), Range("tipo"), 2, 0)
range("xn") = A
Hasta aquí todo bien, el problema me ha venido a la hora de hacerlo con una fórmula combinada como la que presento:
A = Application.WorksheetFunction.IF(Range("O3") = "", .IF(.IsError(.VLookup(Range("N3"), Range("tipo"), 2, 0)), "", .VLookup(Range("N3"), Range("tipo"), 2, 0)), O3)
He notado que cuando escribo Application.WorksheetFunction no esta asociado a ningún IF, solo a IFERROR, me llama la atención que no encuentre ningún ejemplo o algo similar por ningún lado. Gracias.
Por eso te propuse la forma de arriba para que probaras.
If de por si solo esta como condicional en vba, busco en la ayuda y no veo nada parecido a lo que quieres, si deseas hacerlo solo de esa manera disculpame pero no puedo ayudarte.
Al menos yo evito usar eso, si quieres posteas tu consulta en el tablón publico o consulta a otro experto.
Te propuse la forma de arriba que tiene el mismo efecto, asignar el valor a una variable.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas