Использование функции ВПР

Рассмотрим моменты использования аналога функции VLOOKUP OOO - ВПР в эксель. Как и с предыдущим приложением использовать ее без функций ЕСЛИ и ЕОШИБКА не очень удобно, потом придется убирать ошибочные значения, поэтому будем задавать их сразу. Следующий код копирует из файла Рецепты коды в файл Реестр товарных позиций по МХ, затем с помощью функции ВПР в столбце I проверяет массив данных на рецепт.

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)"


Комментарии

Популярные сообщения из этого блога

Запуск макросов в автоматическом режиме по расписанию

Пакетная обработка отчетов

Отправка отчетов по электронной почте