excel - visual - Escribir una función VLOOKUP en vba
no se puede obtener la propiedad vlookup de la clase worksheetfunction (6)
Estoy tratando de buscar un valor en una hoja de cálculo dentro de una matriz de tablas usando la función VLOOKUP en mi código vba. No sé cómo escribirlo correctamente.
Aquí está la fórmula VLOOKUP normal con todas las referencias:
=VLOOKUP(DATA!AN2,DATA!AA9:AF20,5,FALSE)
¿Qué tal si solo usas:
result = [VLOOKUP(DATA!AN2, DATA!AA9:AF20, 5, FALSE)]
Tenga en cuenta el [ y ] .
Como sugirió Tim Williams , el uso de Application.VLookup
no arrojará un error si no se encuentra el valor de búsqueda (a diferencia de Application.WorksheetFunction.VLookup
).
Si desea que la búsqueda devuelva un valor predeterminado cuando no puede encontrar una coincidencia, y para evitar codificar el número de columna, un equivalente de IFERROR(VLOOKUP(what, where, COLUMNS(where), FALSE), default)
en fórmulas, puede usar la siguiente función:
Private Function VLookupVBA(what As Variant, lookupRng As Range, defaultValue As Variant) As Variant
Dim rv As Variant: rv = Application.VLookup(what, lookupRng, lookupRng.Columns.Count, False)
If IsError(rv) Then
VLookupVBA = defaultValue
Else
VLookupVBA = rv
End If
End Function
Public Sub UsageExample()
MsgBox VLookupVBA("ValueToFind", ThisWorkbook.Sheets("ReferenceSheet").Range("A:D"), "Not found!")
End Sub
Encuentre el código a continuación para Vlookup
:
Function vlookupVBA(lookupValue, rangeString, colOffset)
vlookupVBA = "#N/A"
On Error Resume Next
Dim table_lookup As range
Set table_lookup = range(rangeString)
vlookupVBA = Application.WorksheetFunction.vlookup(lookupValue, table_lookup, colOffset, False)
End Function
Has probado:
Dim result As String
Dim sheet As Worksheet
Set sheet = ActiveWorkbook.Sheets("Data")
result = Application.WorksheetFunction.VLookup(sheet.Range("AN2"), sheet.Range("AA9:AF20"), 5, False)
Public Function VLOOKUP1(ByVal lookup_value As String, ByVal table_array As Range, ByVal col_index_num As Integer) As String
Dim i As Long
For i = 1 To table_array.Rows.Count
If lookup_value = table_array.Cells(table_array.Row + i - 1, 1) Then
VLOOKUP1 = table_array.Cells(table_array.Row + i - 1, col_index_num)
Exit For
End If
Next i
End Function
Dim found As Integer
found = 0
Dim vTest As Variant
vTest = Application.VLookup(TextBox1.Value, _
Worksheets("Sheet3").Range("A2:A55"), 1, False)
If IsError(vTest) Then
found = 0
MsgBox ("Type Mismatch")
TextBox1.SetFocus
Cancel = True
Exit Sub
Else
TextBox2.Value = Application.VLookup(TextBox1.Value, _
Worksheets("Sheet3").Range("A2:B55"), 2, False)
found = 1
End If