Excel. Как упростить себе жизнь – часть II

picПервуя часть можно просто пролистать. Теперь перейдём к интересному варианту решения задачи.

Совершенно искусственно созданная задача для пояснения происходящего. У нас есть набор сумм. Надо посчитать, следующим образом: Если сумма находится в промежутке от 200 до 5000, то начисляются скидки. По 10 за каждую сотню. Если сумма не входит в диапазон – то никаких скидок нет. Посчитать сумму отняв НДС. НДС равен 20%

Например сумма 230 входит в диапазон [200-5000], поэтому за каждую сотню отнимаем по 10 = 230-20 = 210 и отнимаем НДС = 210-20% = 168

Как это можно решать?
Вариант номер 1 “Результат” – создать много дополнительных столбцов и посчитать.
Вариант номер 2 “Результат 2” – написать длинную формулу всё в одном
Вариант номер 3 “Результат 3” – собственно наш вариант. Написание функции.

Что такое свои функции и как этим пользоваться. Каждое приложение Microsoft содержит возможность “дописывать” то, чего нам не хватает на встроенном языке программирования. Не пугайтесь – ничего особо сложного там нет. Даже новичок способен использовать эти возможности.

Хочу предупредить. Пока вы не освоите этот инструмент – лучше использовать его, если у вас есть свободное время. Не надо пробовать использовать этот механизм, если “жмут сроки”. Вы должны попробовать писать что-то на простых вещах и только потом использовать в реальных расчетах.

Безусловно есть огромная масса тонкостей, но моя задача НЕ научить, а показать, что такое есть. Итак, начнём. Файл с примером можно скачать вот тут – excel VBA - Пример файла с функцией.

Показываю, для Office 2010, но аналогично и для других оффисов. Если будут пожелания – могу рассказать и про них (хотя скорее всего, a posteriori, пожеланий никаких не будет :)

Итак, вначале нам надо включить закладку “для разработчиков”. Это делается один раз и в дальнейшем вы всегда сможете пользоваться этой функциональностью. Заходим в File \ Options, Закладка Customize Ribbon и включаем закладку Developer, которая по умолчанию отключена.

logo

Теперь у нас включена закладка и мы можем ей пользоваться. Нажав на Visual Basic мы открываем редактор
logo

Теперь создадим модуль. Не запоминайте это слово пока :) Просто правый клик, создать модуль.
logo

И просто набираем текст:
logo

Намного легче будет его читать текст, если не забывать писать комментарии. Сравните это с той длиннющей формулой в excel … А тут и ошибки искать легче и понятно что происходит, даже если файл отдать товарищу или посмотреть его самому, скажем, через пол годика.
logo

Нажимаем Ctrl+S (Save) и переходим в режим обычного, привычного excel. Если нажать =, заметно, что наша новая функция появилась в списке доступных
logo

Ну и сравните все три варианта на одной странице. Куча ненужных столбцов, длиннющая формула или простая запись =mycalc(B9)
Результат одинаков!
(http://host NULL.vdasus NULL.com/mnl3/exc2/7 NULL.jpg)

А теперь смотрите, если мы напишем еще одну функцию и вместо цифр подставим названия переменных – у нас появится возможность использовать эту формулу и в других задачах
logo

И посмотрите, что выходит. =mycalc2(B5;0,18;100;5000;10)
B5 – ячейка которую “считать”
0,18 – НДС
100 – значение нижнего диапазона
5000 – значение верзнего диапазона
10 – скидка.

Т.е. ничего вообще не меняя мы можем использовать эту функцию для самых разных задач! Ничего не переписывая!
logo

Если есть заинтересованность – спрашивайте, расскажу тонкости, на что обратить внимание и какие есть подводные камни. Для желающих самостоятельно поиграть – ключевые слова VBA (Visual Basic for Applications)