Правила написания текста программы
Пишем функцию
В этом разделе описано все, что нужно для написания функции на VBA и ее дальнейшего использования в Excel. Функция помещается в одну из категорий Мастера функций и далее используется наравне с другими функциями. Научившись создавать функции, пользователь получает возможность программировать алгоритмы специальной обработки данных и вставлять их в формулы на рабочем листе Excel.
Алгоритм и программа
Любая программа написана человеком. Компьютерные программы типа «Студия разработки …» облегчают программирование, но не заменяют человека.
Прежде чем писать программу, программист составляет себе план на «человеческом» языке, как должен работать компьютер под управлением программы. Этот план называется алгоритм. На этом этапе важно уметь разбить сложное действие на ряд простых шагов и описать последовательность выполнения этих шагов. И так, запомним следующее.
Алгоритм – описание последовательности действий на «человеческом» языке. Программа – запись алгоритма на языке, понятном ЭВМ, то есть с помощью операторов языка программирования. Алгоритм будущей программы никак не связан с языком программирования. Программа пишется на конкретном языке программирования и не годится для другого языка.
В жизни люди используют алгоритмы, даже не зная об этом. Например, рецепт заваривания чая – алгоритм, рецепт выпечки торта – тоже алгоритм, потому что и то, и другое – описание последовательности действий. Меню – не алгоритм, это список блюд, но не действий.
Существует только три основных типа действий, три типа алгоритмов: линейный (действия выполняются последовательно), ветвящийся (в точке ветвления определяется, делать или не делать следующие действия) и циклический (действия повторяются многократно). Алгоритм реальной программы представляет собой смесь всех трех типов действий. Когда мы пишем алгоритм, нам все равно, на каком языке программирования будет написана программа. Потому что в каждом языке программирования есть операторы линейной, ветвящейся и циклической структуры. Такие операторы есть и в языке VBA.
Функция Герона
Напишем функцию для вычисления площади треугольника по формуле Герона, то есть по заданным сторонам треугольника.
Алгоритм работы функции Герона.
Из вызывающей программы в функцию Герона передаются длины сторон треугольника в трех переменных a, b, c .
Вычисляется полупериметр p=(a+b+c)/2
Вычисляется квадрат площади треугольника s=p×(p–a)×(p–b)×(p–c)
Вычисляется площадь треугольника s=корень(s)
Площадь треугольника возвращается в вызывающую программу.
Так как в вызывающую программу возвращается только одно значение, и не нужно изменять объекты Excel, напишем программу Герона как функцию. Тогда ее можно будет вставлять в формулы рабочего листа.
В программе VBA создадим новый модуль командой InsertðModule. В окне проекта в папке Modules появится модуль Module2. Щелчком мыши выделим Module2. В окне свойств в поле Name изменим имя Module2 на имя Герон (так мы решили назвать новый модуль).
В окне кода в модуле Герон напишем текст функции Герона.
Function Geron(a As Double, b As Double, c As Double) _
As Double
'Вычисление площади треугольника по формуле Герона
Dim p As Double
Dim s As Double
p = (a + b + c) * 0.5
s = p * (p - a) * (p - b) * (p - c)
Geron = Sqr(s)
End Function
Правила написания текста программы
В одной строке пишется один оператор, поэтому не нужны специальные символы «конец оператора».
Оператор может быть очень длинным и продолжаться вправо за край экрана. С таким оператором неудобно работать. В любом месте оператор можно прервать и продолжить на следующей строке. Два символа: пробел и нижнее подчеркивание говорят, что оператор продолжается на следующей строке. Оператор может продолжаться на 32 строки.
Оператор или его продолжение может начинаться с любого места строки. Программа VBA игнорирует ведущие и концевые пробелы.
Обычно в программе одни операторы подчинены другим операторам (входят в состав, образуют тело других операторов). Для лучшей читаемости текста программы принято сдвигать подчиненные операторы вправо на один щелчок табуляции (здесь 4 пробела).
Текст функции начинается с заголовка функции в первой строке, ключевое слово Function, и заканчивается оператором «конец функции» в последней строке, ключевые слова End Function. На экране ключевые слова имеют синий цвет.
Текст комментария начинается с одиночного апострофа ' в любом месте строки; на экране текст комментария имеет зеленый цвет. Программа VBA игнорирует текст комментария.
Оператор Dim <имя_ячейки> создает ячейку в оперативной памяти, цепочку байт, в которой можно хранить данные. Имя ячейки – комбинация букв и цифр (не более 64), начинающаяся с буквы. Ячейку оперативной памяти обычно называют «переменная».
Обратите внимание. Здесь и далее в тексте угловые скобки <…> в операторе обозначают место, где должно быть записано выражение такого типа, как задано в угловых скобках. Например, вместо <имя_ячейки> должно быть записано конкретное имя ячейки: p, s, kw43, …
Конструкция As <тип_ячейки> определяет тип переменной, то есть, сколько байт будет в ячейке, и какие данные будут храниться в ячейке.
Здесь используется переменная типа Double. Это ячейка оперативной памяти длиной 8 байт для хранения вещественного числа. Такие же числа типа Double хранятся в ячейках рабочего листа Excel. Поэтому при использовании функции не будет лишних преобразований данных.
В списке параметров (в скобках в заголовке функции) указан тип входных переменных a, b, c As Double, но нет оператора Dim создания переменных, потому что эти переменные созданы в вызывающей программе.
Имя функции Geron одновременно является ячейкой оперативной памяти типа Double, в которой вычисленная площадь треугольника возвращается в вызывающую программу. Описание типа As Double в конце заголовка функции, стоящее после скобок с параметрами, описывает тип ячейки, которая является именем функции.
Чтобы значение, вычисленное в теле функции, вернуть в вызывающую программу, в теле функции должен быть хотя бы один оператор присваивания для имени функции:
Geron = <значение>
Оператор присваивания чаще всего используется в программировании. В VBA он обозначается = . Оператор присваивания пересылает значение, стоящее справа от оператора, в ячейку оперативной памяти, стоящую слева.