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

Im пытаясь для поиска идента и вернуть имя, однако в данный момент у меня есть код набора для поиска имени и вернуть RowId (я добавил второй фрагмент кода, чтобы взять RowID и вернуть имя)

Я вижу много примеров, отличных от VBA, где это делается, однако ни один из них не использует таблицы.

Можно ли использовать VLookup, как описано, для поиска соответствия во втором столбце и возврата значения из первого столбца? Черт, я вернусь из последнего столбца, если только могу найти второй столбец.

+0

Есть несколько способов сделать то, что вы хотите сделать, чем с помощью ВПР. Попробуйте использовать эту формулу вместо этого ... '= 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

Спасибо Джордан, работает по мере необходимости. Я также считаю предпочтительным использование именованных диапазонов. Спасибо mate –

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 код youre действительно работает так, как я хотел, и я буду использовать его в другом месте в своем коде. Приветствия. –

+0

@MarkLawrence: Рад, что я мог бы помочь! ;) – R3uK

 Смежные вопросы

  • Нет связанных вопросов^_^