Как преобразовать нижеприведенный код в макрос vba? =ИНДЕКС(КЛАССИФИКАЦИЯ,ПОИСКПОЗ(ИСТИНА,ИСХОДЯЩИЙ(ПОИСК(ИМЯ,O12)),0))
У меня есть столбец (O) в Sheet1, в котором нужно выполнить поиск. У меня есть два столбца в sheet2, которые определены с именем (Имена и Классификация). Когда имя найдено в столбце O Sheet1, столбец P имеет соответствующее значение из классификации Sheet2
Лист 1, столбец O, нашего клиента зовут Джон Доу.
Лист2 Название Классификация Джон Доу Класс А
Столбец P Листа1 будет иметь значение Класс A
Пожалуйста помоги!
решение1
Поскольку данные выборки недоступны, я предполагаю,
Sheet 1
СтолбецO
, Имена для поискаO2:O10
.Sheet 2
имеетClasification
&Names
, находятсяNamed range
вA2:A10
&B2:B10
.- Вам нужны результаты в
P2:P10
диапазонеSheet1
.
Сначала я хотел бы предложить, как назначить формулу Excel коду VBA.
Range("P2").FormulaArray = "=IFERROR(INDEX(Clasification,MATCH(TRUE,ISNUMBER(SEARCH(Names,O2)),0)),""No Found"")"
Примечание.Вам нужна формула массива (CSE), чтобы ее .FormulaArray
можно было использовать.
Но поскольку Named Range
is/are необходимо объявлять при использовании макроса VBA, я хотел бы порекомендовать вам следующий код для использования в качестве Standard Module
.
Sub Formula()
Dim Clasification As Range
Dim Names As Range
Set Clasification = Sheets("Sheet2").Range("A2:A10")
Set Names = Sheets("Sheet2").Range("B2:B10")
Range("P2").FormulaArray = "=IFERROR(INDEX(Clasification,MATCH(TRUE,ISNUMBER(SEARCH(Names,O2)),0)),""No Found"")"
Range("P2:P10").FillDown
End Sub
При необходимости измените ссылки на ячейки и именованные диапазоны в коде.