2011-04-06 21 views
24

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.Escribiendo una función VLOOKUP en vba

Aquí es la fórmula normal de BUSCARV con todas las referencias:

=VLOOKUP(DATA!AN2,DATA!AA9:AF20,5,FALSE) 

Respuesta

35

Ha intentado:

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) 
+10

Si la búsqueda no se generará un error: sin embargo, si se le cae el "WorksheetFunction" no lo hará, pero se puede probar el resultado usando IsError (resultado). Sin embargo, necesitaría declarar el resultado como una variante. –

15

¿Qué tal usando:

result = [VLOOKUP(DATA!AN2, DATA!AA9:AF20, 5, FALSE)] 

Nota del [ y ] .

+4

La información anterior se basa en esta respuesta -> [Funciones ocultas de vba] (http://stackoverflow.com/questions/1070863/hidden-features-of-vba) – Oneide

+0

+1, Gracias por darme una pista sobre este . –

+2

¿Qué sucede si necesita que parte de esta declaración sea dinámica? Por ejemplo, AF20 podría ser AF99 o AF10. Normalmente con una cadena, puede usar algo como: "BUSCARV (DATOS! AN2, DATOS! AA9: AF" & lastrow & ", 5, FALSO)". Eso no parece funcionar cuando se usan los corchetes. – Noah

5

Por favor, encontrar el código de abajo 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 
+0

Esto funciona perfectamente para mí, ya que los problemas VLOOKUP me molestan un par de horas. Esto también funciona para la búsqueda en otra hoja, ¡gracias por compartir! –

0
 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 
0
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 
Cuestiones relacionadas