КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Создание собственных функций (прямое программирование)
В общей случае Excel является уникальной системой. Благодаря наличию очень большого количества встроенных функций и специальных средств с его помощью можно решать очень широкий класс прикладных задач, связанных с обработкой управленческой информации. Однако практика создания информационных систем показывает, что обойтись только этими возможностями получается не всегда. Тогда остается одна возможность – создавать новые возможности самостоятельно путем написания собственных процедур и функций. Очевидно, что нельзя требовать от среднестатистического студента экономических специальностей навыков программирования. Тем не менее, приводимые далее примеры воспроизводят ситуации, возникшие в процессе выполнения курсовых работ, связанных с созданием реальных информационных систем. Есть надежда, что решения этих примеров будут достаточно понятны большинству студентов, закончивших школу по старым советским программам. Пример 1. Пусть у нас на листе «Прайс-лист» имеются сведения о поставщиках и поставляемых ими товарах (рис. 5.18):
Рис. 5.18. Размещение данных на листе «Прайс-лист».
А на листе «План закупок» сформирован план следующего вида (рис. 5.19):
Рис. 5.19. Размещение данных о закупках на листе «План закупок». Необходимо определить суммы, выплачиваемые каждому поставщику. Для данной задачи практически невозможно придумать комбинацию встроенных функций, которая давала бы нужный результат. В то же время можно создать собственную функцию следующего вида:
Function Цена(КодТовара, КодПоставщика) As Variant For i = 5 To 16 x1 = Sheets("Прайс-лист").Cells(i, 3) x2 = Sheets("Прайс-лист").Cells(i, 4) If x1 = КодТовара And x2 = КодПоставщика Then Цена = Sheets("Прайс-лист").Cells(i, 5) Exit Function End If Next Цена = "Неверен код товара или поставщика" End Function Для окончательного решения задачи в ячейку F5 вводится формула: =E5*Цена(C5;D5)
Примечание Функцию Цена можно написать и без привязки к конкретным адресам. В этом случае данным прайс-листа следует присвоить имя (например, «ПрайсЛист») и тогда параметры размещения данных можно определить автоматически. Единственное что потребуется при возможных модификациях данных это соблюдать правила: - в первой колонке данных должны быть коды товаров; - во второй – коды поставщиков; - в третьей – оптовая цена.
Function Цена(КодТовара, КодПоставщика) As Variant Dim s As Range Set s = Range("ПрайсЛист ") r = s.Row 'Начальная строка диапазона c = s.Column ' Начальный столбец диапазона n = s.Rows.Count ' Количество строк в диапазоне
For i = r + 1 To n + r x1 = Sheets("Прайс-лист").Cells(i, c) x2 = Sheets("Прайс-лист").Cells(i, c + 1) If x1 = КодТовара And x2 = КодПоставщика Then Цена = Sheets("Прайс-лист").Cells(i, с+2) Exit Function End If Next Цена = "Неверен код товара или поставщика" End Function
Пример 2. Одной из основных задач управления является контроль за выполнением решений. При автоматизации этой задачи обычно фиксируется информация следующего вида (рис. 5.20).
Рис. 5.20. Размещение данных о результатах выполнения решений.
В основной таблице естественно должна и другая дополнительная информация. Например, код лица подготовившего документ (это может быть и обычный гражданин и сотрудник какого-то отдела данной организации), код исполнителя (обычно это сотрудник данной организации), содержание документа, его тип (жалоба, заявка, распоряжение) и т.д. В ячейке G3 выводится текущая дата (с помощью встроенной функции Сегодня). Результатом контроля может быть одна из следующих ситуаций: 1. Дата решения по документу меньше или равна контрольному сроку. Такому документу может быть присвоен статус «Выполнено». Этот статус должен быть присвоен документу, располагающемуся в седьмой строчке. 2. Дата решения по документу больше контрольного срока. Такому документу может быть присвоен статус «Выполнено с опозданием». Этот статус должен быть присвоен документу, располагающемуся в восьмой строчке. 3. Дата решения отсутствует, но при этом контрольный срок больше текущей даты. Такому документу может быть присвоен статус «В рассмотрении». Этот статус должен быть присвоен документу, располагающемуся в девятой строчке. 4. Дата решения отсутствует и при этом контрольный срок меньше текущей даты. Такому документу может быть присвоен статус «Не выполнено». Этот статус должен быть присвоен документу, располагающемуся в шестой строчке.
Для автоматического заполнения колонки «Статус» в нее должна быть вставлена соответствующая формула. Эту формулу можно составить, сконструировав «многоэтажное ЕСЛИ». Например:
=ЕСЛИ(И(G6<=F6;G6<>"");"Выполнено";ЕСЛИ(G6>F6;"Выполнено с опозданием";ЕСЛИ(И(G6="";F6>$G$3);"Выполняется";"Не выполнено"))).
Но можно создать и собственную функцию:
Function Статус(КонтрСрок, ДатаРешения, ТекДата) As String If КонтрСрок >= ДатаРешения Then Статус = "Выполнено" If КонтрСрок < ДатаРешения Then Статус = "Выполнено c опозданием" If КонтрСрок >= ТекДата And ДатаРешения = "" Then Статус = "Выполняется" If КонтрСрок < ТекДата And ДатаРешения = "" Then Статус = "Не выполнено" End Function
Дата добавления: 2014-10-31; Просмотров: 255; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |