2017-02-13 160 views
2

試圖查看它是否可能在表格的第二列使用VLookup?我已經無休止地搜尋,無法找到答案,但我覺得這應該是可能的。Excel VBA VLookup在表格第二列

我現在補充一點,VBA不是我的強項。我來自PHP/MySQL背景,但沒有在我的工作中使用的奢侈品,因此我正在學習VBA。

到目前爲止我的代碼(簡化):

Dim userEnviron As String 
Dim rowId As Integer 

rowId = 0 
userEnviron = Environ("Username") 

Dim tbladmin As ListObject 
Set tbladmin = Sheets("Office Details").ListObjects("officeAdmin") 

On Error Resume Next 
rowId = Application.VLookup(userEnviron , Range(tbladmin), 4, False) 

此代碼查找用戶環境變量,並尋找在tbldadmin表匹配。該表的構造像這樣用頭:

Name UserID Email RowID Tom Smith Tom [email protected] 2

我試着去查找用戶ID並返回名稱,但此刻我已設置來查找名稱,返回rowid的代碼(我又增加了

第二個代碼段取RowID並返回名稱)

我可以看到很多非VBA的例子,但是沒有看到使用表格。

VLookup能否像描述的那樣使用,在第二列中搜索匹配並從第一列返回值?如果只有我可以搜索第二欄,我會從最後一欄收回。

+0

有更多的方法可以做到你想要比使用VLOOKUP做什麼。嘗試使用這個公式來代替...'= IF(MATCH(「Tom」,$ B $ 2:$ B $ B3,0),A2,「」)'你也可以嘗試使用INDEX/MATCH –

+0

不,你不能搜索第二列,VLOOKUP被設計爲僅查看您選擇的第一列。但你可以使用INDEX()MATCH()組合,看看[這篇文章](https://www.deskbright.com/excel/using-index-match/) –

回答

2

如果你想VLOOKUP,但你的數據不是最左邊一列,你可以使用INDEX/MATCH它允許您指定您正在查找的數據以及要返回的數據。試試這個:

rowId = WorksheetFunction.INDEX(Range("officeAdmin[RowID]"), WorksheetFunction.MATCH(userEnviron, Range("officeAdmin[UserID]"), 0)) 

您可以更改爲Range("officeAdmin[RowID]")要查找哪個列,例如Range("officeAdmin[Name]")將返回Name而不是RowID的。

+0

感謝喬丹,只是需要工作。我也發現它最好使用命名範圍。感謝隊友 –

1

您可以直接在Offset要查找範圍:

Dim userEnviron As String 
Dim rowId As Integer 

rowId = 0 
userEnviron = Environ("Username") 

Dim tbladmin As ListObject 
Set tbladmin = Sheets("Office Details").ListObjects("officeAdmin") 

On Error Resume Next 
rowId = Application.VLookup(userEnviron, tbladmin.Range.Offset(0, 1), 3, False) 
+0

感謝R3UK你的代碼確實符合我的要求,我將在我的代碼中的其他地方使用它。乾杯。 –

+0

@MarkLawrence:很高興能幫到你! ;) – R3uK