Использование функции ВПР
Рассмотрим моменты использования аналога функции VLOOKUP OOO - ВПР в эксель. Как и с предыдущим приложением использовать ее без функций ЕСЛИ и ЕОШИБКА не очень удобно, потом придется убирать ошибочные значения, поэтому будем задавать их сразу. Следующий код копирует из файла Рецепты коды в файл Реестр товарных позиций по МХ, затем с помощью функции ВПР в столбце I проверяет массив данных на рецепт.
Worksheets(1).Range("I2").FormulaLocal = "=ЗНАЧЕН(C2)"
Sub VPR()
'Скопировать нужный диапазон в новую книгу
Range("A1:A65535").Copy
FileSpec = ThisWorkbook.Path & "\" &
"Реестр документов по МХ.xls"
Workbooks.Open FileSpec
'Вставляем новый лист
ActiveWorkbook.Worksheets.Add after:=Worksheets("Sheet1")
Worksheets(2).Name
= "Постановка"
'Вставляем данные
ActiveSheet.Paste
‘ Дадим имя вставленному диапазону
Worksheets(2).Range("A1:A65536").Name
= "постановка"
‘Вставляем формулу. Если вы хотите вставлять в VBA формулы
по-русски, используйте FormulaLocal
‘ а не просто Formula.Если формула содержит текстовые значения (кроме имен
диапазонов) их
‘ нужно выделять символами & Chr(34) & с двух сторон
Worksheets(1).Range("I2").FormulaLocal
= "=ЕСЛИ(ЕОШИБКА(ВПР(C2;подстановка;1;0));" & Chr(34) &
"не рец." & Chr(34) &
";" & Chr(34) & "рец." & Chr(34) & ")"
‘Посчитаем сколько в соседней полностью заполненном столбце
заполненных ячеек
n =
Sheets("Sheet1").Range("H1").CurrentRegion.Rows.Count
‘ На это значение и протянем нашу формулу
Worksheets(1).Range("I2").AutoFill
Destination:=Worksheets(1).Range("I2:I" & n), Type:=xlFillDefault
Worksheets(1).Range("I1")
= "Проверка на рецепт"
End Sub
Как в ООО здесь можно возвращать 1 или 0 а не текстовые значения для простоты сортировки, возвращать найденные значения.
"=ЕСЛИ(ЕОШИБКА(ВПР(C2;подстановка;1;0));0;1)"
"=ЕСЛИ(ЕОШИБКА(ВПР(C2;подстановка;1;0));0;ВПР(C2;подстановка;1;0))"
Фунции DECIMAL в Excel нет, но зато есть более простая функция ЗНАЧЕН(), с помощью которой легко преобразовать текстовые значения в числовые (для решения проблем с отчетами где коды товаров или номера документов представлены (воспринимаются) как текст). Пример:
Worksheets(1).Range("I2").FormulaLocal = "=ЗНАЧЕН(C2)"
Комментарии
Отправить комментарий