понедельник, 1 июня 2015 г.

Примеры использования функции VLOOKUP

Функция VLOOKUP является самой часто используемой функцией в макросах сравнения нескольких файлов. Навык работы и знание вариантов использования этой функции очень важно для построения как простых одиночных сравнений, так и сложных обработок с несколькими сравнениями.
Код массовой вставки функций в столбец мы уже рассмотрели ранее. Для вставки функции VLOOKUP как и любой другой используется именно он. В этом посте рассмотрим лишь ньюансы употребления этой функции. Как известно эта функция в случае получения ошибки (значение не найдено) возвращает ошибку H/Д. Как этого избежать? Использовать дополнительно функцию IF и ISERROR.
Стандартная строка функции подстановки в этом случае может выглядить так:

 Podstanovka  = "=IF(ISERROR(VLOOKUP(" & oConv2.UserInterfaceRepresentation & ";подстановка;3;0));"& Chr(34) & "-" & Chr(34) & ";(VLOOKUP(" & oConv2.UserInterfaceRepresentation & ";подстановка;3;0))"
 currcell.setFormula (Podstanovka)

Эту строчку следует понимать как - если функция VLOOKUP вернет ошибку, то такое значение заменить на прочерк "-", иначе - вернуть результат функции.

Часто значение возвращать не нужно, а нужно лишь указать что функция нашла соответствующее значение (например проверка на рецепт/не рецепт - нам не нужен в столбце подстановки код рецепта - нам нужно всего лишь знать, что это рецепт). В таком случае лучше воспользоваться следующим видом формулы:

 Podstanovka  = "=IF(ISERROR(VLOOKUP(" & oConv2.UserInterfaceRepresentation & ";подстановка;1;0)); "& Chr(34) & "не рецепт" & Chr(34) & "; " & Chr(34) & "рец." & Chr(34) & ")"
 currcell.setFormula (Podstanovka)

Обратите внимание на символ & Chr(34) & - он используется, когда вам нужно вставить какое-то значение (текстовое) в тело формулы в кавычках. Этот символ представляет собой символ кавычки по коду ANSI. Если вы будете пробовать вставлять в выражение строки с кавычками без него - программа вернет ошибку обработки.

Еще один пример использования VLOOKUP  - более простой, в случае ошибки формула вернет ноль, в случае совпадения - единицу:

 Podstanovka  = "=IF(ISERROR(VLOOKUP(" & oConv2.UserInterfaceRepresentation & ";код;1;0)); 0; 1)"
 currcell.setFormula (Podstanovka)

Часто для функции VLOOKUP нужно начала привести сравниваемые диапазоны в сопоставимый вид. Например при сравнении одинаковых отчетов, выгруженных из разных баз столбец код товара может в одной из них иметь символ апострофа' перед цифрами и восприниматься как текст, а другом апострофа не будет. В этом случае, если есть возможность лучше провести сравнение по столбцу наименования, либо привести столбец с апострофами с числовой вид. Делается это с помощью функции DECIMAL:

 Podstanovka  = "=DECIMAL(" & oConv2.UserInterfaceRepresentation & ";10)"
 currcell.setFormula (Podstanovka)

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

Задача: выполнить задачу из предыдущего поста с применением усложненных функций VLOOKUP
а) при постановке из файла рецептов выдавать значения рецепт
не рецепт.
б) если не рецепт - выводить ноль. если рецепт - единицу.

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

Отправить комментарий