J'essaie de rechercher une valeur sur une feuille de calcul dans un tableau à l'aide de la fonction VLOOKUP de mon code vba Je ne sais pas comment l'écrire correctement.
Voici la formule normale de VLOOKUP avec toutes les références:
=VLOOKUP(DATA!AN2,DATA!AA9:AF20,5,FALSE)
As-tu essayé:
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)
Pourquoi ne pas utiliser:
result = [VLOOKUP(DATA!AN2, DATA!AA9:AF20, 5, FALSE)]
Notez les [et] .
Veuillez trouver le code ci-dessous pour 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
Comme Tim Williams a suggéré , l'utilisation de Application.VLookup
ne génère pas d'erreur si la valeur de recherche n'est pas trouvée (contrairement à Application.WorksheetFunction.VLookup
).
Si vous souhaitez que la recherche renvoie une valeur par défaut lorsqu'elle ne trouve pas de correspondance et que vous évitiez de coder en dur le numéro de colonne - un équivalent de IFERROR(VLOOKUP(what, where, COLUMNS(where), FALSE), default)
dans les formules, vous pouvez utiliser la fonction suivante:
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
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