2. Примеры пользовательских функций

advertisement
1
Содержание
ВВЕДЕНИЕ................................................................................................................. 2
§1. ТЕХНОЛОГИЯ СОЗДАНИЯ ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ ...... 4
СТРУКТУРА ФУНКЦИИ. ............................................................................................... 4
ОБЪЯВЛЕНИЕ ФУНКЦИИ ............................................................................................. 7
ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ В ФОРМУЛАХ................................................................. 9
ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ФУНКЦИЙ VBA ..................................................... 11
§2. ПРИМЕРЫ ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ .................................... 15
ФУНКЦИИ ДЛЯ РАБОТЫ С ТЕКСТОМ ......................................................................... 15
ФУНКЦИИ ДЛЯ ОБРАБОТКИ ЧИСЛОВОЙ ИНФОРМАЦИИ. ........................................... 17
ФУНКЦИИ ДЛЯ РАБОТЫ С МАССИВАМИ ................................................................... 21
ФУНКЦИИ ДЛЯ РАБОТЫ С ДАТОЙ.............................................................................. 23
ДРУГИЕ ФУНКЦИИ .................................................................................................... 23
ЗАКЛЮЧЕНИЕ ....................................................................................................... 25
ЛИТЕРАТУРА ......................................................................................................... 26
2
Введение
Табличные
процессоры
-
удобный
инструмент
для
экономистов,
бухгалтеров, инженеров, научных работников - всех тех, кому приходится
работать с большими массивами числовой информации. Эти программы
позволяют создавать таблицы, которые являются динамическими, т. е. содержат
так
называемые
вычисляемые
поля,
значения
которых
автоматически
пересчитываются по заданным формулам при изменении значений исходных
данных,
содержащихся
в
других
полях.
В
дальнейшем
их
можно
просматривать, изменять, записывать на магнитный диск для хранения,
печатать на принтере. Microsoft Excel – это программа управления электронных
таблицами общего назначения, которая используется для вычислений,
организации и анализа деловых данных.
Excel очень мощный инструмент для решения задач, имеющих дело с
массивами разнообразных данных, поэтому область его применения обширна,
начиная от бухгалтерских и складских задач и заканчивая расчетами энергетики
спутниковых линий. В Excel удобно решать задачи линейной алгебры, такие
как работа с матрицами и др. Также есть все возможности по полноценной
работе (сортировка, выборка, сводные таблицы, анализ) с базами данных.
На практике в Excel приходится часто повторять одни и те же действия и
операции.
Любая
офисная
работа
предполагает
некую
"рутинную
составляющую" - одни и те же еженедельные отчеты, одни и те же действия по
обработке поступивших данных, заполнение однообразных таблиц или бланков
и т.д. Благодаря наличию языка программирования в Excel возможно создание
различных
пользовательских
специфические
пользовательских
стандартные
функций
программ,
задачи.
позволяет
которые
автоматизируют
Использование
автоматизировать
макросов
эти
и
операции,
перекладывая монотонную однообразную работу на плечи Excel.
Цель курсовой работы - оптимизировать работу с электронными
таблицами за счет создания собственных пользовательских функций.
3
В соответствие с целью работы формулируются следующие задачи:
Изучить технологию, правила создания собственных функций, принципы
работы с ними в табличном процессоре Excel;
Изучить возможности встроенного языка программирования Visual Basic
for Application для создания пользовательских функций;
Привести примеры, демонстрирующие процесс создания пользовательских
функций;
Разработать собственные примеры функций рабочего листа MS Excel,
показать возможности их применения.
Объект исследования – управление потоками данных возможностями
табличного процессора Ms Excel.
Предмет исследования – возможность использования пользовательских
функций Ms Excel для управления потоками данных.
Теоретическая значимость работы заключается в изучении технологии
создания собственных функций в табличном процессоре MS Excel, а также в
изучении возможностей встроенного языка программирования Visual Basic for
Application.
Практическая значимость данной курсовой работы определяется
следующими тезисами:
Существует необходимость оптимизации работы с табличными данными.
Microsoft Excel является самым популярным табличным процессором на
данный момент, и владение этим инструментом помогает облегчить работу во
многих областях производства.
Приведенная теория и разобранные примеры могут быть использованы
студентами для самостоятельного изучения данной темы, вследствие чего,
разработанные ими функции обогатят и оптимизируют в дальнейшем их работу
по созданию приложений в Excel.
4
§1. Технология создания пользовательских функций
Значительным преимуществом программы Excel является возможность
создания формул. Формулы представляют собой выражения, по которым
выполняются вычисления на странице. Формула начинается со знака равенства
(=) и может состоять из пяти типов элементов:
1. Операторы. Символы, например "+" (сложение) и "*" (умножение).
2. Ссылки на ячейки. В эту категорию входят именованные ячейки и
диапазоны, относящиеся к текущему рабочему листу, ячейкам другого листа
текущей книги и даже ячейкам листа другой рабочей книги.
3. Значения или строки. Например, 7,5 или "Результаты на конец года".
4. Скобки. Задают порядок выполнения действий в формуле.
5. Функции и их аргументы. Например, СУММ или СРЗНАЧ и их
аргументы.
Формула не может содержать более, чем 1024 символа. Если необходима
формула, количество символов в которой превышает предельно допустимое,
следует разделить ее на несколько формул или создать пользовательскую
функцию (с помощью VBА).
Функции — заранее определенные формулы, которые выполняют
вычисления по заданным величинам, называемым аргументами, и в указанном
порядке. Эти функции позволяют выполнять как простые, так и сложные
вычисления. Например, функция ОКРУГЛ округляет число в ячейке A10
(см. рис. 1).
Структура функции.
1. Структура функции начинается со знака
равенства (=), за ним следует имя функции,
открывающая
скобка,
список
аргументов,
Рис. 1.Структура функции
разделенных запятыми, закрывающая скобка (см. рис. 1).
5
2. Имя функции. Для появления списка доступных функций нужно
щелкнуть ячейку и нажать клавишу SHIFT+F3.
3. Аргументы. Существуют различные типы аргументов: число, текст,
логическое значение (ИСТИНА и ЛОЖЬ), массивы, значение ошибки
(например #Н/Д), или ссылки на ячейку. В качестве аргументов используются
константы, формулы, или функции. В каждом конкретном случае необходимо
использовать соответствующий тип аргумента.
4. Всплывающая подсказка аргумента. Всплывающая подсказка с
синтаксисом и аргументами появляется после ввода функции. Например,
всплывающая подсказка появится после ввода =ОКРУГЛ(. Всплывающие
подсказки появляются только для встроенных функций.
Диалоговое окно Мастер функций облегчает ввод функций при создании
формул, содержащих функции. При вводе функции в формулу диалоговое окно
Мастер функций отображает имя функции, все ее аргументы, описание
функции и каждого аргумента, текущий результат функции и всей формулы.
В некоторых случаях может потребоваться использование функции как
одного из аргументов другой функции. Например, в следующей формуле
функция СРЗНАЧ вложена в функцию ЕСЛИ для сравнения среднего значения
нескольких значений с числом 50.
Вложенная функция, используемая в качестве аргумента, должна
вычислять соответствующий этому аргументу тип данных. Например, если
аргумент должен быть логическим, то есть иметь значение либо ИСТИНА, либо
ЛОЖЬ, то вложенная функция в результате вычислений тоже должна давать
логическое значение либо ИСТИНА, либо ЛОЖЬ. Иначе появится сообщение
об ошибке «#ЗНАЧ!».
В формулах можно использовать до семи уровней вложения функций.
Когда функция Б является аргументом функции А, функция Б находится на
втором уровне вложенности. Например, функции СРЗНАЧ и СУММ считаются
функциями второго уровня, потому что обе они являются аргументами
6
функции ЕСЛИ. Функция, вложенная в качестве аргумента в функцию
СРЗНАЧ, будет функцией третьего уровня и так далее.
Функции удобны, поскольку они:
 Упрощают формулы.
 Позволяют
производить
вычисления,
которые
невозможно
осуществить без них.
 Ускоряют выполнение некоторых задач редактирования.
 Позволяют налагать условия на выполнение формул, что дает
последним элементарную способность к принятию решений.
В Excel внедрено более 300 предопределенных функций, более того,
после установки надстройки "Пакет анализа" становятся доступными
дополнительные
функции.
Excel
предоставляет
возможность
создания
дополнительных (пользовательских) функций средствами редактора Visual
Basic.
Язык программирования VBА — мощный инструмент, позволяющий
Excel выполнять такие задачи, осуществить которые иными средствами
чрезвычайно трудно или невозможно. С помощью VBА создаются следующие
основные типы макросов:
 макросы, автоматизирующие операции в Excel;
 макросы, функционирующие в качестве пользовательских функций,
которые используются при записи формул таблиц.
При существовании многих функций, доступных в Excel и VBA, новые
функции рабочего листа могут понадобиться:
 для упрощения работы и для предоставления формулам большей
гибкости. Например, можно создать функцию, значительно сокращающую
стандартные формулы.
 сокращенные формулы читабельнее и с ними намного проще работать.
Однако пользовательские функции в формулах работают гораздо медленнее,
чем встроенные. Но в производительных системах скоростное различие часто
протекает незамеченным.
7
Пользовательские функции не могут никоим образом изменять среду
Excel. Это означает, что определенная пользователем функция не может
выбирать, вставлять, удалять или форматировать никакие данные в рабочем
листе, а также не может добавлять, удалять или переименовывать листы или
рабочие книги.
Когда Excel вычисляет значения рабочего листа, он рассчитает и
пользовательскую функцию. Каждый оператор в функции анализируется и
выполняется, а результат возвращается на рабочий лист. Функцию можно
использовать неограниченное количество раз и применять ее любого значения
ячеек.
Пользовательская функция работает так же, как и любая другая
внедренная функция. Ее можно вставлять в формулу с помощью команды меню
ВставкаФункция или используя кнопку вставки функции в строке формул. В
диалоговом окне вставки функции пользовательские функции представляются
как функции, созданные пользователем. Как и другие функции, их можно
использовать в более сложных формулах.
Объявление функции
Для объявления функции используется общепринятый синтаксис:
[Public|Private][Static]Function name{[arglist]) [As type]
[statements] [name = expression]
[Exit Function]
[statements] [name = expression]
End Function
 Public (общий) показывает, что данная функция является доступной
для других процедур в других модулях рабочей книги (необязательно).
 Private показывает, что данная функция доступна только для других
процедур в одном и том же модуле (необязательно). При использовании
ключевого слова Private функция не будет отображаться в диалоговом окне
вставки функции.
 Static показывает, что значения переменных, объявленные в функции,
8
являются зарезервированными для вызовов (необязательно).
 Function
-
ключевое
слово,
отображающее
начало
функции
(обязательно).
 Name может быть любым допустимым для переменной именем. Когда
функция заканчивает работу, ее результатом является значение, присваиваемое
имени функции (обязательно).
 Arglist
представляет
собой
список
нескольких
переменных,
представляющих аргументы функции. Аргументы заключаются в круглые
скобки. Нужно использовать запятую для разделения этих аргументов (наличие
аргументов не обязательно).
 Туре
показывает
тип
данных,
возвращаемых
функцией
(необязательно).
 Statements
являются
полноценными
VBA-операторами
(необязательно).
 Exit Function— это оператор, результат которого— выход из функции
(необязательно).
 End Function— ключевое выражение, показывающее конец работы
функции (обязательно).
Выбор имени функции
Каждая функция должна иметь уникальное имя, и при выборе имени
функций нужно придерживаться следующих правил:
 Можно использовать символы алфавита, цифры и некоторые символы
пунктуации, но первый символ обязательно должен быть буквой.
 Можно использовать любую комбинацию букв верхнего и нижнего
регистров.
 Нельзя использовать такие имена, которые похожи на адрес ячеек
рабочей книги (такие как J21). Формально можно использовать такое имя для
функции, но Excel не воспримет его как функцию.
 VBA не различает регистры. Для придания имени функции лучшей
9
читабельности нужно использовать символы разных регистров (лучше написать
МинимальныйЭлемент, чем минимальныйэлемент).
 Нельзя использовать пробелы или точки. Для придания именам
функции лучшей читабельности можно использовать символ нижнего
подчеркивания (Минимальный_Элемент).
 В имя функции нельзя вставлять следующие символы: #, $, %, !. Они
являются символами объявления типа, которые имеют специальное назначение
в VBА.
 Имя функции может состоять не более чем из 255 символов.
Использование функций в формулах
Использование пользовательской VBA-функции в формулах аналогично
использованию встроенных функций. Если функция находится в той же
рабочей книге, что и формула, не нужно выполнять дополнительных действий.
Если же они находятся в разных рабочих книгах, следует:
 либо добавить ссылку на эту книгу. Например, чтобы использовать
функцию
Минимальный_Элемент,
Мои_функции.xls,
следует
объявленную
использовать
в
рабочей
следующую
книге
формулу:
=Мои_функции.xls!Минимальный_Элемент(Al:A1000). Если вставить функцию
с помощью диалогового окна вставки функции, ссылка на рабочую книгу будет
вставлена автоматически.
 или настроить ссылку на
рабочую книгу. Это можно сделать с
помощью средств редактора Visual
Basic ToolsReferences (см. рис.2).
Если функция объявлена в рабочей
книге ссылки, имя рабочего листа
использовать
нет
необходимости.
Даже когда зависимая рабочая книга
Рис. 2. ToolsReferences
10
задана как ссылка, диалоговое окно вставки функции продолжит вставлять
ссылку на рабочую книгу (даже если это не необходимо).
 или создать надстройку. При создании надстройки в рабочей книге, в
которой есть пользовательские функции, не нужно использовать ссылку на
файл, чтобы использовать одну из функций в формуле; однако надстройку
необходимо обязательно установить в Excel. Для создания надстройки
необходимо выполнить следующие действия:
1. Создать функции и убедиться, что они работают надлежащим
образом.
2. Активизировать редактор Visual Basic, выбрать рабочую книгу в
окне проекта. Выберать Tools VBAProject Properties и перейти на вкладку
Protection. Установить флажок опции Lock Project for Viewing и дважды
ввести пароль. Эту операцию нужно выполнить только в том случае, если вы
хотите предохранить ваш макрос от вмешательства в него или в диалоговые окна
постороннего пользователя.
3. Возобновить работу Excel. Выбрать команду ФайлСвойства,
щелкнуть на вкладке Документ и ввести краткое описательное название в
поле Название, и более длинное описание в поле Заметки.
Этот этап не обязателен, но он делает надстройку проще в
использовании,
отображая
описательный
текст
в
диалоговом
окне
подключения надстроек.
4. Выбрать в меню команду Файл Сохранить как.
5. В диалоговом окне сохранения выбрать из списка типов файла
опцию Надстройка Microsoft Excel (*.xla).
6. Если
вы
не
хотите
использовать
папку,
определяемую
по
умолчанию, можно указать другую.
7. Щелкнуть на кнопке Сохранить. Копия рабочей книги будет
сохранена (с расширением .xla) как надстройка, а исходная рабочая книга
останется открытой.
11
После создания надстройки можно установить ее, используя стандартную
процедуру: выбрать Сервис  Надстройки и щелкнуть в появившемся
диалоговом окне на кнопке Обзор. Указать расположение файла * .xla.
Аргументы функций
Пользовательские функции, подобно встроенным в Excel функциям,
могут изменяться в зависимости от используемых в них аргументов. при
определении аргументов в VBA-функциях нужно придерживаться следующих
советов:
 Функция может не иметь аргументов.
 Функция может иметь фиксированное количество обязательных
аргументов (от 1 до 60).
 Функция
может
содержать
комбинацию
обязательных
и
необязательных аргументов.
Использование встроенных функций VBA
В VBA есть множество встроенных функций, упрощающих вычисление и
выполнение операций. В выражении х = Sqr(MyValue) вычисляется квадратный
корень с помощью функции Sqr, а результат присваивается переменной х.
Многие из функций VBA схожи с функциями рабочих листов Excel. Например,
функция VBA Len, которая возвращает длину строки, эквивалентна функции
ДЛСТР рабочего листа Excel.
Имея представление о функциях VBA, можно избавить себя от большого
объема работы. В коде VBA можно использовать многие (но не все) функции
рабочего листа Excel. Чтобы в выражении VBA использовать функцию рабочего
листа, предварительно необходимо указать ключевое слово WorksheetFunction
или Application. Следующие выражения являются эквивалентными:

Result = Application.Max(x, у, z)

Result = WorksheetFunction.Max(x, y, z)
12
Нижеприведенный код демонстрирует использование функции Excel в
выражении VBA. Редко используемая в Excel функция Римское (Roman)
преобразует десятичные числа в римские.
DeсValue = 1999
RValue = WorksheetFunction.Roman(DecValue)
Переменная RValue содержит строку MCMXCIX.
Функции Excel, для которых представлен эквивалент в VBA, нельзя
использовать. Например, в VBA нет функции рабочего листа SQRT, потому что
в VBA есть собственная версия этой функции — Sqr. Таким образом,
следующее выражение вызовет ошибку:
х = Application.SQRT(123) 'ошибка
Использование диалогового окна вставки функции
Диалоговое окно вставки функции Excel — это удобный инструмент,
позволяющий выбирать необходимую функцию рабочей книги из списка
доступных функций. Диалоговое окно вставки функции также позволяет
отобразить список функций и отображает подсказку об аргументах функции.
По умолчанию пользовательские функции представляются в виде списка
категорий определенных пользователем, но их можно отнести и к любой
другой категории. Также можно добавить к функции описание.
Добавление описания функции
При выборе функции в диалоговом окне вставки функции появляется
краткое описание этой функции. Если не описывать функцию, в диалоговом
окне вставки функции появится следующий текст: Справка недоступна (см.
рис. 3).
13
Рис. 3. Краткое описание выбранной
Рис. 4. Подготовка описания функции в
функции в диалоговом окне вставки
диалоговом окне параметров макроса
функции
Инструкции создания описания для пользовательской функции:
1. Создать функцию в редакторе Visual Basic.
2. Перейти в Excel и выбрать СервисМакросМакросы (или нажать
<Alt+F8>). Диалоговое окно макроса представит в виде списка доступные
внедренные процедуры, но не функции.
3. Ввести имя функции в поле имени макроса.
4. Щелкнуть на кнопке Параметры для отображения диалогового окна
настроек
макроса.
Если
кнопка
неактивна,
вероятнее
всего
введено
неправильное имя функции.
5. Введите описание функции в поле описания (см. рис. 4).
При использовании диалогового окна Мастер функции диалоговое окно
аргументов функции появится после щелчка на кнопке ОК. Для встроенных
функций в окне аргументов функции отображается описание для каждого
аргумента, для пользовательской функций нет возможности обеспечить такое
описание
14
Определение категории функции
В Excel нельзя напрямую определить пользовательскую функцию в
отдельную категорию. Чтобы функция была определена в отдельную
категорию, заданную пользователем, нужно дополнительно изменить VBA-код.
Например, чтобы переместить созданную функцию Вознаграждение в
категорию Финансовые (это первая категория в диалоговом окне вставки
функции). Для выполнения этого необходимо:
 Вывести окно ViewImmediate Window.
 Набрать код Application.MacroOptions Macro:="Вознаграждение",
Category:=1
В таблице 1 представлен перечень категорий функций, которые можно
использовать. Несколько из этих категорий (10-13) обычно не выводятся в
диалоговом окне вставки функции. При отнесении функции к одной из этих
категорий она будет отображается в диалоговом окне.
Таблица 1. Категории функций
Номер категории
Название категории
0
Все (категория не определена)
1
Финансовая
2
Дата и время
3
Математические
4
Статистические
5
Ссылки и массивы
6
Работа с базой данных
7
Текстовые
8
Логические
9
Проверка свойств и значений
10
Команды
11
Настройки
12
Управления макросами
13
Динамический обмен данными/внешние
14
Пользовательские
15
Инженерные
15
§2. Примеры пользовательских функций
В
приложении
Excel
имеется
достаточное
количество
функций,
предназначенных для работы с текстом, числовой информацией, датой,
массивами и другими типами данных, но, иногда, пользователь может
столкнуться с ситуацией, которой не соответствует ни одна существующая
функция.
В
таком
случае
пользователю
предоставляется
прекрасная
возможность создать свою собственную функцию для заданного рабочего листа
с использованием встроенного языка программирования VBA.
Функции для работы с текстом
Функция Перевертыш возвращает в заданную ячейку текст, располагая в
нем символы в обратном порядке. Например, если в функцию как аргумент
введен текст клавиатура, то возвращается текст арутаивалк.
Пример 1. Перевертыш
Function Перевертыш(Исходное_слово)
Результат = ""
For i = 1 To Len(Исходное_слово)
Результат = Mid(Исходное_слово, i, 1) + Результат
Next
Перевертыш = Результат
End Function
Функция Первое_слово возвращает часть текста до первого пробела.
Например, если в функцию как аргумент введен текст мы желаем счастья вам,
то возвращается текст мы.
Пример 2. Первое слово текста
Function Первое_слово(Текст)
i = 1
While Mid(Текст, i, 1) <> " " And i < Len(Текст)
i = i + 1
Wend
If i < Len(Текст) Then
Первое_слово = Mid(Текст, 1, i - 1)
Else
Первое_слово = Текст
End If
End Function
16
Функция ФИО предназначена для получения из полного имени имя в
формате Фамилия И. О. Например, если в функцию как аргумент введен текст
Иванов Иван Иванович, то возвращается текст Иванов И. И.
Пример 3. Имя в формате Фамилия И. О.
Function ФИО(Текст) As Variant
Dim Данные(3) As Variant
i = 0
While Len(Текст) > 0
Данные(i) = Первое_слово(Текст)
Текст = Mid(Текст, Len(Данные(i)) + 2)
i = i + 1
Wend
ФИО = Данные(0) + " " + Mid(Данные(1), 1, 1) + ". " + Mid(Данные(2), 1, 1)
+ "."
End Function
Данная функция позволяет сократить формулу
=ЛЕВСИМВ(B21;НАЙТИ(" ";B19))&ПСТР(B19;НАЙТИ(" ";B19)+1;1)&
". "&ПСТР(B19;НАЙТИ(" ";B19;НАЙТИ(" ";B19)+1)+1;1)&"." ,
которая выполняет аналогичную операцию.
Вспомогательная функция ЗНПРЕП возвращает значение истина, если
указанный символ совпадает с одним из знаков препинания или пробелом.
Пример 4. Является ли символ знаком препинания
Function ЗНПРЕП (k)
ЗНПРЕП = False
Знаки = " ,.?!():;"
For j = 1 To Len(Знаки)
If Mid(Знаки, j, 1) = k Then ЗНПРЕП = True
Next
End Function
Функция Телеграмма предназначена для получения стоимости телеграммы.
Аргументами для данной функции являются текст – текст телеграммы и
стоимость – стоимость одного слова и знака препинания.
Пример 5. Стоимость телеграммы
Function Телеграмма(Текст, Стоимость) As Variant
If Len(Текст) = 0 Then
Количество = 0
Else
Количество = 1
17
End If
For i = 1 To Len(Текст)
If ЗНПРЕП(Mid(Текст, i, 1)) = True Then
Количество = Количество + 1
End If
Next
Телеграмма = Количество * Стоимость
End Function
Функции для обработки числовой информации.
При написании функций в VBA можно обращаться к встроенным функциям
рабочего листа. Следующая функция получает сумму элементов массива,
используя встроенную функцию СУММ (Sum).
Пример 6. Сумма элементов(способ 1)
Function Сумма1(Массив)
Сумма1 = Application.Sum(Массив)
End Function
Пример 7. Сумма элементов(способ 2)
Function Сумма2(Massiv)
Dim cell As Range
Set Massiv = Intersect(Massiv.Parent.UsedRange, Massiv)
Сумма = 0
For Each cell In Massiv
Сумма = Сумма + cell.Value
Next
Сумма2 = Сумма
End Function
Здесь функция Intersect возвращает диапазон, образованный пересечением
двух диапазонов. Massiv.Parent.UsedRange возвращает используемый диапазон
рабочего листа, на котором находится массив Massiv. Эта конструкция
используется для оптимизации вычислений для исключения пустых ячеек,
которые могут находиться в Massiv
В следующей процедуре функции принимается аргумент одной ячейки и
используется цикл For-Next для возращения суммы 7 ячеек, находящихся под
выбранной ячейкой включая ячейку аргумента:
Пример 8. Сумма элементов(способ 3)
Function Сумма3(Ячейка As Range)
Сумма = 0
For i = 0 To 6
18
Сумма = Сумма + Ячейка.Offset(i, 0)
Next
Сумма3 = Сумма
End Function
Здесь свойство Offset (как и свойства Range и Cells) также возвращает
объект Range. Свойство Offset применяется к диапазону. Оно принимает два
аргумента, соответствующие относительному расположению левой верхней
ячейки определенного объекта Range. Аргументы могут быть положительными,
отрицательными или равными нулю.
Функция Макс_со_всех_листов возвращает максимальное значения из
определенной ячейки всех рабочих листов.
Чтобы определить максимальное значение (например, В1) на нескольких
рабочих
листах,
можно
использовать
такую
формулу:
=МАКС(Лист1:Лист4!В1)
Эта формула возвращает максимальное значение ячейки В1 листов Лист1,
Лист4 и всех листов, находящихся между ними. Но что делать, если после
Лист4 нужно добавить новый лист (Лист5)? Формула автоматически не
обновляется, поэтому нужно отредактировать ее и добавить ссылку на новый
лист: =МАКС(Лист1:Лист5!В1)
Функция Макс_со_всех_листов принимает аргумент одной ячейки и
возвращает максимальное значение этой ячейки на всех рабочих листах
рабочей
книги.
Например,
приведенная
ниже
формула
возвращает
максимальное значение ячейки В1 на всех листах рабочей книги.
= Макс_со_всех_листов (Bl)
При добавлении нового листа редактировать формулу не нужно.
Пример 9. Возвращение максимального значения из рабочих листов
Function Макс_со_всех_листов(cell As Range)
Dim MaxVal As Double
Dim Addr As String
Dim Wksht As Object
Application.Volatile
Addr = cell.Range("A1").Address
MaxVal = -9.9E+307
For Each Wksht In cell.Parent.Parent.Worksheets
If Wksht.Name = cell.Parent.Name And _
Addr = Application.Caller.Address Then
19
Else
If IsNumeric(Wksht.Range(Addr)) Then
If Wksht.Range(Addr) > MaxVal Then _
MaxVal = Wksht.Range(Addr).Value
End If
End If
Next Wksht
If MaxVal = -9.9E+307 Then MaxVal = 0
Макс_со_всех_листов = MaxVal
End Function
Родителем ячейки является рабочий лист, а родителем рабочего листа —
рабочая книга. Таким образом, цикл Each-Next обрабатывает все рабочие листы
в рабочей книге. Первый оператор If внутри цикла выполняет проверку на
наличие функции в проверяемой ячейке. Если функция обнаружена, ячейка
игнорируется во избежание ошибки циклической ссылки.
Функция Вознаграждение рассчитывает размер приза за полученное место
участникам соревнований исходя из размера призового фонда. За первое место
призер получает половину от всего призового фонда, второму и третьему место
достается 3/10 и 2/10 фонда соответственно. За остальные места выводится
благодарность за участие. Аргументами функции служат призовой фонд и
полученное место.
Пример 10. Размер вознаграждения за занятое место
Function Вознаграждение(Объем_призового_фонда, Место)
Select Case Место
Case 1
Вознаграждение = 0.5 * Объем_призового_фонда
Case 2
Вознаграждение = 0.3 * Объем_призового_фонда
Case 3
Вознаграждение = 0.2 * Объем_призового_фонда
Case Else
Вознаграждение = "Спасибо за участие!"
End Select
End Function
Функция Комиссионные.
Менеджерам по продажам часто необходимо просчитать комиссионные,
полученные от продаж. Расчеты могут быть основаны на подвижной шкале:
чем больше работник продал, тем больше комиссионных он получил.
20
Комиссионные можно вычислить для различных объемов продаж,
указанных на рабочем листе. Можно использовать сложную формулу со
вложенными функциями IF, например:
=IF(Al<0;0;IF(Al<10000;Al*0,08;IF(Al<20000;А1*0,105;IF(А1<40000;А1*0,
1 2;А1*0,14))))
Но это не наилучший способ по нескольким причинам. Во-первых,
формула получается слишком громоздкой и запутанной, что затрудняет ее
понимание. Во-вторых, значения в формуле указываются жестко, что
затрудняет внесение изменений в формулу. И если есть больше семи
процентных ставок, то запись функции выйдет за ограничения по вложенным
функциям Excel.
Если структура начисления комиссионных более сложная, следует
воспользоваться
дополнительными аргументами
в функции.
Например,
менеджер по продажам внедряет новую политику, чтобы уменьшить текучесть
кадров: общие комиссионные повышаются на 1% в год, пока агент по продажам
работает на эту компанию.
Ниже приведена функция Комиссионные. Эта функция принимает два
аргумента: объем продажи за месяц (Цена_проданного_товара) и количество
отработанных в компании лет (Стаж).
Пример 11. Вычисление комиссионных
Function Комиссионные(Цена_проданного_товара, Стаж) As Single
' Вычисляет комиссионные с продаж на основе рабочего стажа
Const Tierl As Double = 0.1
Const Tier2 As Double = 0.105
Const Tier3 As Double = 0.12
Const Tier4 As Double = 0.14
Select Case Цена_проданного_товара
Case Is >= 40000
Комиссионные = Цена_проданного_товара * Tier4
Case Is >= 20000
Комиссионные = Цена_проданного_товара * Tier3
Case Is >= 10000
Комиссионные = Цена_проданного_товара * Tier2
Case Is < 10000
Комиссионные = Цена_проданного_товара * Tierl
End Select
Комиссионные = Комиссионные + Комиссионные * Стаж / 100
End Function
21
Функция Число_прописью возвращает числу его текстовый эквивалент.
Число может принимать значение от 1 до 999. Например, если в качестве
аргумента выступает число 123, то функция возвратит строку сто двадцать
три. Подобные функции могут быть полезны при распечатке отчетов с
наличием денежных средств, где требуется выводить сумму прописью.
Пример 12. Возвращение числу его текстового эквивалента
Function Число_прописью(n As Integer)
num19 = Array("", "один", "два", "три", "четыре", "пять",_
"шесть","семь", "восемь", "девять", "десять", "одиннадцать", "двенадцать",_
"тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать",_
"восемнадцать", "девятнадцать")
num20 = Array("", "", "двадцать ", "тридцать ", "сорок ", "пятьдесят
",_ "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
num100 = Array("", "сто ", "двести ", "триста ", "четыреста ",_
"пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
If n < 20 Then
Число_прописью = num19(n)
Else
If n Mod 100 < 20 Then
nn = num19(n Mod 100)
n = Int(n / 100)
Else
nn = num19(n Mod 10)
n = Int(n / 10)
nn = num20(n Mod 10) + nn
n = Int(n / 10)
End If
nn = num100(n Mod 10) + nn
Число прописью = nn
End If
End Function
Функции для работы с массивами
Функция Разбить_на_слова предназначена для получения из текста
массива слов. Она может быть полезна при разделении нескольких значений
находящихся в одной ячейке разделенных пробелами. Например данные
Фамилия, Имя, Отчество, Дата рождения, Номер паспорта, и др. могут
находиться в одной ячейке, но манипулировать такими данными не удобно.
Необходимо, чтобы все данные находились в разных столбцах.
Пример 13. Разделение строки на слова
Function Разбить_на_слова(Текст) As Variant
Dim Слова(5) As Variant
i = 0
While Len(Текст) > 0
Слова(i) = Первое_слово(Текст)
22
Текст = Mid(Текст, Len(Слова(i)) + 2)
i = i + 1
Wend
Разбить_на_слова = Слова
End Function
В данной функции используется пользовательская функция Первое_слово,
которая возвращает первое слово в тексте.
Чтобы воспользоваться этой функцией, и любой другой, которая
возвращает массив данных необходимо:
1. Выделить ячейки, куда будет возвращаться значение функции.
2. Вызвать мастер ввода функций.
3. Выбрать нужную функцию
4. В диалоговом окне ввода параметров нажать Shift+Ctrl+Enter
Функция Количество_зачений_между возвращает количество элементов,
которые лежат в определенном диапазоне. Параметрами для этой функции
являются сам массив и два элемента, определяющих нижнюю и верхнюю
границы диапазона. Данная функция может использоваться для любых типов
данных, что придает ей большей универсальности.
Пример 14. Количество элементов принадлежащих диапазону
Function Количество_значений_между(Massiv, N1, N2)
Dim cell As Range
Set Massiv = Intersect(Massiv.Parent.UsedRange, Massiv)
Количество = 0
For Each cell In Massiv
If cell.Value >= N1 And cell.Value <= N2 Then
Количество = Количество + 1
End If
Next
Количество_значений_между = Количество
End Function
Функция
Выбор_функции(Massiv,
Op),
используется
вместе
с
раскрывающимся списком, созданным с помощью команды Excel Данные 
Проверка. Результат формулы зависит от содержимого ячейки Ор, которая
содержит список функций, например, Average, Count, Max и т.д. Оператор
23
Evaluate подсчитывает аргументы и возвращает результат. Таким образом,
можно работать и с другими типами функций.
Пример 15. Универсальная функция
Function Выбор_функции(Massiv, Op)
Выбор_функции = Evaluate(Op & "(" & Massiv.Address(external:=True) & ")")
End Function
Функции для работы с датой.
Очень часто бывает нужно представить дату в определенном формате. Для
этого есть возможность использовать форматирование ячейки, но формат
применяется только если в ячейке находиться одно значение даты. Для
использования формата в любом месте текста нужно создать дополнительную
функцию.
Функция СтрМесяц преобразует месяц из числового формате в строковый.
Пример 16. Преобразование месяца в текст
Function СтрМесяц(n As Integer)
months = Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",_
"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
NameMonth = months(n - 1)
End Function
Пример использования функции может быть такой: в ячейке введем
следующую формулу: ="сейчес "&СтрМесяц(МЕСЯЦ(СЕГОДНЯ()))&" месяц"
Результатом выполнения будет строка сейчас Май месяц, если текущий
месяц Май.
Другие функции
При разработке многопользовательского приложения может понадобиться
вывести на рабочий лист имя пользователя, работающего с приложением. Для
этого можно воспользоваться пользовательской функцией Имя_пользователя
Пример 17. Получение имени пользователя
Function Имя_пользователя()
Имя_пользователя = Application.UserName
End Function
24
Для наглядности отображения данных можно использовать диаграммы и
графики, а можно воспользоваться пользовательскими функциями и получить
псевдографическое представление данных.
Касса на
Касса на
начало
конец
месяца (у.е.) месяца (у.е.)
200
280
200
280
450
280
450
555
210
400
200
280
200
280
%
Изобразить графически увеличение или уменьшение кассы
0,8
0,8
-1,7
1,05
1,9
0,8
0,8







Пример 18. Псевдографическое отображении информации
Function Повторить(Количество) As String
Повторить = ""
For i = 1 To Количество
Повторить = Повторить + "n"
Next
End Function
Function Изобразить(cell)
Изобразить = Повторить(Abs(cell * 100) / 10)
End Function
Функция Повторить возвращает строку, состоящую из букв «n»,
количество которых определяется аргументом Количество, которая в шрифте
Wingdings отображается в виде «». В функции Изобразить значение ячейки
масштабируется и приводится к целому типу для передачи в функцию
Повторить. Для отображения отрицательных значений используется красный
цвет
и
формула
положительных
=ЕСЛИ(Ячейка<0;Изобразить(Ячейка);""),
значений
используется
зеленый
цвет
и
для
формула
=ЕСЛИ(Ячейка>0;Изобразить(Ячейка);"")
Использование
пользовательских
функций
существенно
создание формул на рабочем листе, а так же улучшает их понимание.
облегчает
25
Заключение
Excel — лидер среди программных средств, позволяющих создавать
электронные таблицы. Ms Excel намного опережает остальных
не только
благодаря сильной маркетинговой политике компании Microsoft. Просто Excel
— действительно лучший из существующих на сегодняшний день процессоров
электронных таблиц.
Формулы — это та область, в которой преимущество Excel перед другими
подобными программными средствами наиболее очевидно. Благодаря более
300 функциям можно создавать формулы различной сложности. Наличие
мощного и гибкого языка Visual Basic снимает большинство ограничений
накладываемых на формулы и делает возможным написание даже очень
сложных функций.
В данной курсовой работе приведен результат анализа возможностей MS
Excel в области создания собственных функций рабочего листа. Разработано 18
примеров пользовательских функций, демонстрирующие обработку текстовой,
числовой информации, работу с массивами данных, а так же датой и системной
информацией. Все рассмотренные функции могут быть использованы для
решения практических задач. Алгоритмы данных функций могут стать основой
для создания более сложных и универсальных функций.
26
Литература
1. Excel | FAQ | Функции [Электронный ресурс]// Microsoft Excel и VBA.
Электронные таблицы. Справочник. Вопросы и Ответы. Примеры. Советы.
[Web-сайт] http://msoffice.nm.ru/faq/function.htm#faq4
2. Демидова Л. А., Пылькин А. Н. Программирование в среде Visual
Basic for Applications: Практикум. - M.: Горячая линия - Телеком, 2004. –
175 с: ил.
3. Лавренов С. М. Excel: Сборник примеров и задач.-М.:Финансы и
статистика, 2002.-336 с.:ил.
4. Пермякова Е. В. Методические рекомендации для изучения MS Excel,
Глазов. Издательский центр ГГПИ, 2004. -44 с.
5. Пользовательские функции в Excel [Электронный ресурс]// Онлайн
учебники
HTML,
Excel,
Word,
VBA.
[Web-сайт]
http://on-line-
teaching.com/vba/lsn0110.html
6. Создание пользовательских функций - Excel - Microsoft Office Online
[Электронный
ресурс]//
Microsoft
Office
Online
[Web-сайт]
http://office.microsoft.com/ru-ru/excel/HA010548461049.aspx
7. Справочная система MS Excel. [Электронный ресурс]// Microsoft.
[Файл справки] xlmain11.chm
8. Табличный процессор Excel. Вычисления на рабочем листе. Функции
рабочего листа. [Электронный ресурс]// ШКола.LV: Международный Дом
творчества и образования [Web-сайт]
http://shkola.lv/index.php?mode=cht&chtid=501
9. Уокенбах, Джон. Подробное руководство по созданию формул в Excel
2002.: Пер. с англ. — М. : Издательский дом "Вильяме", 2002. — 624 с.: ил.
10.Уокепбах, Джон. Профессиональное программирование на VBA в
Excel 2002. Пер. с англ.— М. : Издательский дом '"Вильяме", 2003. — 784 с: ил.
27
11.Условное
форматирование
с
использованием
пользовательских
функций [Электронный ресурс]// Профессиональные приемы работы в
Microsoft Excel [Web-сайт] http://msexcel.ru/content/view/50/1/
12.Учебный курс: Основы офисного программирования и документы
Excel. Лекция: Excel для математиков [Электронный ресурс]// INTUIT.ru [Webсайт] http://www.intuit.ru/department/se/vbaexcel/2/3.html
Download