2014-09-18 3 views
1

Я использую функции INDEX и MATCH, чтобы вытащить данные, которые являются конкатенированной строкой G2 и H2 из колонки D (извините, у меня недостаточно точек для прикрепления pic). Столбец D имеет индекс (столбец A и столбец B), а столбцы A и B имеют значения до 12-й строки. MATCH отлично работает, давая мне позицию 6 на листе. Но когда я использую это в коде VBA, как показано ниже, INDEX работает в коде VBA (можно увидеть через MsgBox), но функция MATCH, которая будет выделять значение переменной «check», не работает. Я очень долго ломаю голову. Вам нужна помощь от экспертов. Кто-нибудь, пожалуйста, скажите мне, где я буду ошибаться?Функция Excel VBA Match не работает

Sub testindex() 

Dim check As Long 

Set sh = Sheets("Sheet1") 

For j = 1 To 11 

'Index value is correctly shown 
MsgBox "Index Value=" & Application.WorksheetFunction.Index(sh.Range("A2:B12"), j, 1) & Application.WorksheetFunction.Index(sh.Range("A2:B12"), j, 2) 

'Cells(7, 4)=ISA737775 same as G2&H2 
MsgBox "Cells(7,4)=" & Cells(7, 4) 
check = Application.WorksheetFunction.Match(Cells(7, 4), Application.WorksheetFunction.Index(sh.Range("A2:B12"), j, 1) & Application.WorksheetFunction.Index(sh.Range("A2:B12"), j, 2), 0) 

Next j 

End Sub 

Благодаря

ответ

0

Match ожидает второй быть В параметре в виде диапазона. Когда вы вызываете совпадение через VBA, на самом деле диапазон должен быть объектом диапазона, а не только некоторой строкой, такой как «A1: A12», или как бы то ни было, что выводятся ваши конкатенированные формулы индекса.

Во всяком случае, вы уже итерации, так почему бы просто не просто вызвать эти значения напрямую, а не потянуть их значения через Index?

check = Application.WorksheetFunction.Match(Cells(7, 4), sh.Range("A" & 2 + j).value & sh.Range("B" & 2 + j), 0)

Что пишет точно такие же вещи, но без того, чтобы использовать функцию обременительного INDEX в VBA, чтобы сделать это. Обратите внимание, что это все равно не будет работать, потому что второй параметр совпадения - это всего лишь строка, которая является конкатенированным значением из столбца A и столбца B. Вы можете преобразовать их в диапазон, вставив их в объект диапазона с помощью:

check = Application.WorksheetFunction.Match(Cells(7, 4), sh.Range(sh.Range("A" & 2 + j).value & sh.Range("B" & 2 + j)), 0)

Я предполагаю, что значения в A и B являются фактическими именами ячеек, которые при объединении будут создавать диапазон. Например, когда j=1, то это будет похоже на check = Match (Ячейки (7,4), sh.Range («G2: H50»), 0) или что-то еще ...

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