2011-04-06 192 views
24

我正在嘗試使用我的vba代碼中的VLOOKUP函數在表格數組中的電子表格中查找值。我不知道如何正確書寫。在vba中編寫VLOOKUP函數

這是正常的VLOOKUP公式的所有引用:

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

回答

35

你試過:

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

如果查找失敗,將拋出一個錯誤:但是如果你放棄了「WorksheetFunction」不會,但你可以測試使用IsError(結果)的結果。儘管如此,你仍需要聲明結果。 – 2011-04-06 21:10:24

15

如何只使用:

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

注意[]

+4

以上內容是基於此回答 - > [隱藏功能的vba](http://stackoverflow.com/questions/1070863/hidden-features-of-vba) – Oneide 2011-04-06 16:56:56

+0

+1,謝謝你在這一個線索我。 – 2011-04-06 16:58:17

+2

如果您需要本聲明的一部分是動態的,該怎麼辦?例如,AF20可以是AF99或AF10。通常使用字符串,你可以使用類似於:「VLOOKUP(DATA!AN2,DATA!AA9:AF」&lastrow&「,5,FALSE)」。這在使用方括號時似乎不起作用。 – Noah 2013-07-22 00:30:51

5

請找到下面的代碼爲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

這對我來說完美,因爲VLOOKUP問題困擾我幾個小時。這也適用於在其他表格上查找,感謝分享! – 2016-12-22 06:25:20

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