Упрощение и индексирование использование функции сопоставления

#excel #vba #named-ranges

#excel #vba #именованные диапазоны

Вопрос:

Я использую функцию INDEX MATCH Excel для поиска конкретных данных в этом именованном диапазоне. Поскольку мой столбец «СОВПАДЕНИЕ» является вторым столбцом (столбец «B»), мне нужно использовать для этого функцию СМЕЩЕНИЯ.

Пример формулы Excel таков :

 =INDEX(Macro;MATCH($F$29;OFFSET(Macro;0;1;;1);0);MATCH(J$2;Macro!$2:$2;0)))
 

Итак, чтобы избежать использования этой функции по всей моей электронной таблице, я хочу создать функцию для возврата таких данных.

Я пытаюсь создать INDEX MATCH на VBA, и это работает, но как только я пытаюсь использовать именованный диапазон (плюс СМЕЩЕНИЕ), я получаю некоторые ошибки.

Это дает мне ошибку :

 DADOSMACRO = Application.WorksheetFunction.Match(Range("DataIWant"), Range("Macro").Offset(, 1), 0)"
 

Это работает :

 "DADOSMACRO = Application.WorksheetFunction.Match(Range("DataIWant"), Range("Macro!A8:A37").Offset(, 1), 0)"
 

Полная функция:

 Public Function DADOSMACRO() As String 
    DADOSMACRO = Application.WorksheetFunction.Match(Range("$F$29"), _
                                      Range("Macro").Offset(, 1), 0) 
End Function
 

Комментарии:

1. Можете ли вы опубликовать полный код, который у вас есть на данный момент

2. Как мне грустно, я пытаюсь преобразовать существующую формулу Excel в код VBA. Код до сих пор является «Общедоступной функцией DADOSMACRO() в виде строки DADOSMACRO = Application. WorksheetFunction. Сопоставление (диапазон («$ F $ 29»), диапазон («Макрос»). Функция завершения смещения (, 1), 0) »

3. «Я получаю некоторые ошибки» — не очень полезное описание того, что вы видите.

4. Range("$F$29") без определенного рабочего листа по умолчанию всегда будет использоваться ActiveSheet, поэтому вы можете получить ошибки или неверный результат, если активен другой лист.

5. Но именованные диапазоны можно использовать во всей книге. Если я запускаю этот код VBA, он отлично работает и устанавливает мой диапазон как курсивный (диапазон («Макрос»).Шрифт. Курсив = TRUE)

Ответ №1:

Спасибо всем, кто пытался помочь. Наконец-то я смог решить эту проблему с помощью службы поддержки Microsoft.

Проблема не в использовании именованных диапазонов. Проблема в том, что именованный диапазон представляет собой диапазон целых строк, поэтому функция смещения VBA не работает.

Я, наконец, заставил это работать, заменив смещение на Application.WorksheetFunction.Match(Range("CELL_I_WANT_FIND"), Range("NAMEDRANGE").Columns(2), 0)

Таким образом, соответствующий код vba может найти данные в столбце «B»