2017-02-13 163 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