2016-11-15 33 views
0

我對VBA非常陌生,任何幫助將不勝感激。我試圖創建一個宏來做一個vlookup,而不是手動在單元格中輸入它。Vlookup Macro 2工作表

我的excel文件有兩個工作表,一個名爲「Microsoft」,另一個名爲「SN用戶名」。

所以我找了查找的結果,「SN用戶名」的數據返回到表「微軟」(B21)

下面是VLOOKUP我嘗試在VBA做 = VLOOKUP(B21 ,'SN用戶名'!A:B,2,FALSE)

任何幫助將不勝感激! 謝謝

+1

您是否正確地搜索該網站?我現在已經看過這麼多次了。請參閱以下鏈接以協助您:[http://stackoverflow.com/questions/40512439/how-to-get-vlookup-to-select-down-to-the-lowest-row-in-vba/40512623# 40512623] :) – user1

+0

如果我理解正確,這聽起來像你希望vlookup的結果進入B21,但通過傳遞B21作爲參數,你有一個循環引用。如果您發佈任何錯誤或意外行爲的詳細信息,這將有所幫助。 – jsheeran

+0

@Shah Miah您可以使用帶有Application.VLookup的VLOOKUP的VBA版本,它取決於您需要哪種類型的解決方案。請在下面檢查我的答案,並讓我知道它是否適用於您 –

回答

0

你可以在VBA版本功能Application.VLookup

下面的零件代碼檢查工作表「Microsoft」中的單元B21的值是否在工作表「SN用戶名」的列A:B中找到。如果發現它將第二列返回到單元格A21(您可以根據需要修改它)。如果不是,則在單元格A21中放入一條「找不到物品」的短信 - 僅供參考。

Option Explicit 

Sub VLookup_withErrHandling() 

Dim Cell    As Range 
Dim Rng     As Range 
Dim lRow    As Range 

Set Cell = Sheets("Microsoft").Range("B21") 
Set Rng = Sheets("SN Username").Range("A:B") 

If Not IsError(Application.VLookup(Cell, Rng, 2, False)) Then 
    Cell.Offset(0, -1).Value = Application.VLookup(Cell, Rng, 2, False) 
Else 
    Cell.Offset(0, -1).Value = "Item Not Found" 
End If 

End Sub 

添加For循環:如果你通過你的「微軟」表多行要循環,你可以添加一段代碼如下:

Dim lRow    As Long 

' just for example, loop from row 21 until row 30 
For lRow = 21 To 30 
    Set Cell = Sheets("Microsoft").Range("B" & lRow) 

    If Not IsError(Application.VLookup(Cell, Rng, 2, False)) Then 
     Cell.Offset(0, -1).Value = Application.VLookup(Cell, Rng, 2, False) 
    Else 
     Cell.Offset(0, -1).Value = "Item Not Found" 
    End If 

Next lRow 

編輯 1 :根據PO修改說明如下:

Option Explicit 

Sub VLookup_withErrHandling() 

Dim Cell    As Range 
Dim Rng     As Range 
Dim LastRow    As Long 
Dim lRow    As Long 

With Sheets("SN Username") 
    ' find last row with username in column A 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 

    Set Rng = Sheets("SN Username").Range("A2:B" & LastRow) 
End With 

' loop through row 2 until row 20 
For lRow = 2 To 20 
    Set Cell = Sheets("Microsoft").Range("A" & lRow) 

    If Not IsError(Application.VLookup(Cell.Value, Rng, 2, False)) Then 
     Cell.Offset(0, 1).Value = Application.VLookup(Cell.Value, Rng, 2, False) 
    Else 
     Cell.Offset(0, 1).Value = "UserName Not Found in SN UserNames sheet" 
    End If 

Next lRow 

End Sub 
+0

嗨,謝謝您的迴應!我對此很陌生,所以請和我一起裸照。 讓我試着再解釋一遍,因爲我想我以前可能沒有做過。 –

+0

好吧,你要編輯你的文章嗎? –

+0

嗨嗨,非常感謝您的回覆!我對此很陌生,所以請和我一起裸照。 讓我試試解釋這一次(道歉) 表「微軟」在「列中的」用戶名列表(用戶名開始於A2,完成A20) 表「SN用戶名」具有完全相同的用戶名列表列A(用戶名開始於A2並完成A20),但在'B列'中有一個'全名'列表(全名開始於B2並完成B20) 所以我想要做的是對用戶名和Vlookup 'B''微軟'工作表中返回'全名'值 –