Студопедия

КАТЕГОРИИ:


Архитектура-(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):

 

  B C D E F
             
    Код товара Код поставщика Оптовая цена  
           
           
           
           
           
           
           
           
           
           
           
           
           

Рис. 5.18. Размещение данных на листе «Прайс-лист».

 

А на листе «План закупок» сформирован план следующего вида (рис. 5.19):

  B C D E F G
             
    Код товара Код поставщика Количество Сумма  
             
             
             
             
             
             
             
             
             
             
             
             
             

Рис. 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).

 

  B C D E F G H
               
            12.12.2011  
               
    Номер п/п Дата приема № документа Контрольный срок Дата решения Статус
      05.11.2011 123/4-12 05.12.2011    
      05.11.2011 123/3-11 05.12.2011 27.11.2011  
      06.11.2011 123/4-11 06.12.2011 10.12.2011  
      14.11.2011 123/4-12 14.12.2011    
      15.11.2011 123/4-13 15.12.2011    
               

Рис. 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; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.021 сек.