Оглавление ГЛАВА 1 ЗАПИСЬ И СОХРАНЕНИЕ АЛГОРИТМОВ В EXCEL ................................................................. 3 § 1. Введение ....................................................................................................................................................................... 3 1.1. Вызов редактора для написания текста алгоритма ...................................................................................................... 3 1.2. Окно немедленного выполнения ................................................................................................................................... 4 1.3. Сохранение и открытие документов с макросами ........................................................................................................ 4 1.4. Функции ............................................................................................................................................................................ 5 1.5. Процедуры ........................................................................................................................................................................ 5 1.6. Вызов функции ................................................................................................................................................................. 6 1.7. Вызов процедуры ............................................................................................................................................................. 6 1.8. Работа в редакторе .......................................................................................................................................................... 6 § 2. Объекты и операторы ................................................................................................................................................... 7 2.1. Константы.......................................................................................................................................................................... 7 2.2. Особенности работы в русской версии Excel ................................................................................................................. 7 2.3. Переменные ..................................................................................................................................................................... 7 2.4. Символы арифметических операций ............................................................................................................................. 8 2.5. Встроенные функции ....................................................................................................................................................... 8 2.6. Арифметические выражения .......................................................................................................................................... 9 2.7. Операция объединения (конкатенации) строк.............................................................................................................. 9 2.8. Символы операций сравнения ........................................................................................................................................ 9 2.9. Символы логических операций..................................................................................................................................... 10 2.10. Логические выражения ................................................................................................................................................ 10 2.11. Приоритеты операторов .............................................................................................................................................. 11 2.12. Оператор присваивания .............................................................................................................................................. 12 2.13. Объявление переменных ............................................................................................................................................ 12 2.14. Несколько операторов в одной строке и перенос оператора .................................................................................. 14 2.15. Структура функции ....................................................................................................................................................... 14 2.16. Структура процедуры ................................................................................................................................................... 14 2.17. Ввод данных в диалоговом режиме. Функция InputBox........................................................................................... 15 2.18. Однострочный If / Then ............................................................................................................................................... 15 2.19. Многострочный If / Then / End If ................................................................................................................................. 15 2.20. Оператор If / Then / Else / End If .................................................................................................................................. 16 2.21. Оператор Select Case / Case / Case Else / End Select ................................................................................................... 16 2.22. Оператор цикла For / Next ........................................................................................................................................... 17 2.23. Оператор цикла DO While / Loop ................................................................................................................................ 18 2.24. Оператор цикла Do Until / Loop ................................................................................................................................... 19 1 2.25. Оператор выхода Exit ................................................................................................................................................... 19 2.26. Оператор объявления массива ................................................................................................................................... 19 2.27. Присваивание значений элементам массива ............................................................................................................ 20 2.28. Вложенные циклы ........................................................................................................................................................ 20 2.29. Процедуры ввода данных в ячейки. Свойства Cells и Range..................................................................................... 20 2.30. Ввод формул в ячейки. Свойства Formula и FormulaLocal......................................................................................... 22 2.31. Оператор With .............................................................................................................................................................. 22 2.32. Функции с аргументами–массивами. Свойство COUNT ............................................................................................ 23 2.33. Объект WorksheetFunction ........................................................................................................................................... 24 ГЛАВА 2 ПЕРЕМЕННЫЕ, ТИПЫ ДАННЫХ И ОБЛАСТИ ВИДИМОСТИ ......................................... 25 ГЛАВА 3 ОТЛАДКА МАКРОСОВ ................................................................................................................... 26 ГЛАВА 4 ВВОД ДАННЫХ С ИСПОЛЬЗОВАНИЕМ ФОРМ ..................................................................... 27 ГЛАВА 5 ЗАДАЧИ ............................................................................................................................................... 28 ГЛАВА 6 ПРИЛОЖЕНИЯ ................................................................................................................................. 34 2 Приложение I Свод основных операторов ................................................................................................................. 34 Приложение II Функции рабочего листа и соответствующие методы объекта WorksheetFunction ...................... 35 Глава 1 Запись и сохранение алгоритмов в EXCEL § 1. Введение В EXCEL реализовано средство для записи алгоритмов обработки данных. Алгоритмы записываются по определенным правилам на языке Visual Basic for Application (VBA) в форме функций или процедур. Тексты алгоритмов состоят из отдельных строк. Каждая строка содержит инструкцию (или ее часть), предписывающую процессору выполнить определенные действия. Такие инструкции называют операторами. 1.1. Вызов редактора для написания текста алгоритма Запустите Excel. Для работы с VBA нужно отобразить вкладку «Разработчик». Вкладка «Разработчик» содержит средства создания макросов и форм, а также средства для работы с XML. Для этого: Щелкните кнопку «Office» , затем На странице «Основные» поставьте галочку . Редактор VBA вызывается кнопкой «Visual Basic» на ленте «Разработчик» или комбинацией Alt+F11. Тексты алгоритмов пишутся и сохраняются в модулях. Новый модуль в окне редактора VBA создается цепочкой: Insert, Module. Модулям автоматически присваиваются порядковые номера и все они сохраняются как части файла EXCEL. Один модуль может содержать тексты и функций, и процедур. На рисунке представлен модуль, содержащий тексты двух функций и одной процедуры. При желании, название модуля можно изменить на что-либо содержательное. Для этого: Выполните команду: View, Properties Window (окно Properties появится под окном Project). В окне Project выделите модуль (например, Module1). 3 В окне Properties щелкните справа от (Name), удалите содержимое, введите новое имя и нажмите Enter. Имена должны начинаться с буквы и могут быть до 40 символов в длину, включая буквы, цифры и символы подчеркивания (_). 1.2. Окно немедленного выполнения Окно немедленного выполнения — Immediate — можно отобразить нажав комбинацию клавиш Ctrl+G или с помощью меню: View, Immediate Window. В этом окне можно производить вычисления, мгновенно получая результат. Для вывода результата используется оператор ? (синоним Print). Например, напечатав в окне Immediate строку ? 2+2 и нажав Enter, в следующей строке получим 4. Следующие строки также дадут в результате 4: x = 2 ? x^2 Строка ? sin(1) выдаст число 0,841470984807897 Мы будем использовать окно Immediate для тестирования различных свойств VBA. 1.3. Сохранение и открытие документов с макросами Для сохранения текстов алгоритмов, файлу EXCEL надо присвоить формат Книга Excel c поддержкой макросов (Кнопка «Office», Сохранить как, поле «Тип файла»). Пиктограмма такого файла содержит восклицательный знак: . Такие файлы имеют расширение .xlsm. При открытии книги EXCEL, содержащей макросы, происходит проверка на надежность макросов, поскольку в рабочих книгах могут находиться потенциально опасные макросы заражающие компьютер вирусами. Надежными считаются только макросы, либо удостоверенные действующей, не просроченной цифровой подписью, выданной общепризнанным центром сертификации, при этом разработчик, удостоверивший макрос, должен быть надежным, либо открываемый документ должен находиться в надежном расположении (папка на жестком диске или на сетевом ресурсе, зарегистрированная в Microsoft Office как надежное расположение). Все остальные макросы считаются ненадежными. Такими будут считаться и макросы, которые вы будете создавать в процессе изучения VBA. Чтобы все-таки можно было использовать такие макросы, придется временно разрешить использование всех макросов. Для этого Щелкните кнопку «Office» 4 , затем . Выберите Центр управления безопасностью, затем щелкните кнопку . Появится окно «Центр управления безопасностью» Выбрать параметр «Включить все макросы (не рекомендуется, возможен запуск опасной программы)». Щелкнуть OK в этом окне, затем в окне «Параметры Excel». Теперь можно открыть документ, содержащий макросы. Внимание! По окончании работы со своим документом, содержащим макросы, рекомендуется отключить этот режим! Для редактирования написанных алгоритмов нужно вызвать редактор VBA, выбрать (двойным щелчком) модуль, в котором находится нужный текст, и начать редактирование. Для редактирования написанной процедуры можно также воспользоваться комбинаций клавиш Alt+F8 или цепочкой: вкладка ВИД, кнопка МАКРОС, КОМАНДА МАКРОС. В списке имеющихся процедур-макросов выбирается нужная строка и щелкается по кнопке ИЗМЕНИТЬ. 1.4. Функции Ниже приведен пример функции, которая вычисляет сумму квадратов двух чисел: Function SumSq(x, y) SumSq = x ^ 2 + y ^ 2 End Function Здесь первая строка содержит оператор заголовка функции; вторая строка – оператор присваивания, третья строка — оператор конца функции. Слова Function, End – ключевые слова языка VBA. SumSq — имя функции (задается пользователем) и одновременно переменная, x, y — аргументы (переменные). 1.5. Процедуры Следующая процедура выдает сообщение "Пример процедуры": 5 Sub MyProc() MsgBox "Пример процедуры" End Sub В первой строке расположен оператор заголовка процедуры, во второй строке – оператор выдачи сообщения (в кавычках находится текст сообщения), в третьей строке - оператор конца процедуры. Слова Sub, MsgBox — ключевые слова языка VBA. MyProc — имя процедуры (задается пользователем). "Пример процедуры" – текстовая константа (задается пользователем). Тексты процедур называют МАКРОСАМИ. Имена функций и процедур могут состоять из букв и цифр, но первым символом должна быть буква. Имена не должны содержать пробелов, но могут содержать знак подчеркивания (_). Внимание: имена функций и процедур не должны совпадать со встроенными именами Excel, например, с именами встроенных функций (типа Sum, Частное…), адресами ячеек (A1, Sum100…) и т. п. 1.6. Вызов функции Вызов функции осуществляется так же, как и вызов стандартной функции Excel: введением в ячейку имени функции с нужными аргументами. Например, формула =SumSq(5;-3) вычисляет сумму квадратов чисел 5 и -3. При этом говорят, что функции переданы значения аргументов 5 и -3. Ввод имени функции в формулу в ячейку Excel можно осуществить либо непосредственным набором имени на клавиатуре, либо с использованием мастера функций. В последнем случае надо реализовать цепочку меню: вкладка ФОРМУЛЫ, кнопка ВСТАВИТЬ ФУНКЦИЮ, выбрать из списка КАТЕГОРИИ строку ОПРЕДЕЛЕННЫЕ ПОЛЬЗОВАТЕЛЕМ и выбрать нужное имя (Excel автоматически добавляет в этот список имена всех пользовательских функций, созданных пользователем в текущей рабочей книге). 1.7. Вызов процедуры Запуск процедуры реализуется цепочкой меню вкладка ВИД, кнопка МАКРОС, команда МАКРОС или комбинацией клавиш Alt+F8. Из списка имен выбирается нужное и щелкается по кнопке ВЫПОЛНИТЬ. 1.8. Работа в редакторе В отличие от большинства текстовых процессоров, редактор VBA не только отображает то, что вводит пользователь, но и вносит в текст изменения: выделяет синим цветом ключевые слова; выделяет зеленым цветом комментарии; выделяет красным цветом синтаксические ошибки; ключевые слова пишет с большой буквы. Комментарии - это напоминания о том, что делает та или иная часть алгоритма. Комментарии делаются пользователем для себя и не влияют на ход алгоритма. Комментарии могут занимать целую строку или ее часть и отделяются от основного текста апострофом: 6 Function Tg(x) 'функция вычисляет тангенс Tg = sin(x)/cos(x) 'делить на нуль нельзя End Function Синтаксические ошибки – это нарушения правил языка VBA. Например, синтаксической ошибкой будет отсутствие апострофа перед текстом комментария или, скажем, неправильное написание ключевого слова. Для удобочитаемости текстов программ помимо комментариев используются отступы. Отступы не являются обязательными, но очень желательны. Для получения отступа используется клавиша TAB. § 2. Объекты и операторы 2.1. Константы арифметические (числовые ) 5, -123.0, 3.14, 2.4E15 текстовые (символьные) "ABCD123F", "Mr. Brown" логические (булевы) True, False даты #08/31/97# Число 2.4E15 записано в так называемом научном формате и равно 2,4 10 15 Текстовые константы – это любые цепочки символов, заключенные в двойные кавычки. Дата #08/31/97# соответствует 31.08.1997 г. 2.2. Особенности работы в русской версии Excel Как видно из предыдущего пункта, при записи констант в VBA используются американские региональные установки: десятичный знак — точка, а не запятая, даты записываются в формате месяц/день/год. Воспользуемся окном Immediate. Введем строку ? 2,3 Результат: 2 3 Запятая — разделитель списка. ? 2.3 2,3 При выводе десятичный разделитель соответствует текущим региональным установкам, в нашем случае — запятая. ? 31.08.97 31,08 0,97 С точки зрения VBA здесь две десятичных дроби. ? #08/31/97# 31.08.1997 Вот теперь все правильно. 2.3. Переменные Переменные – это области памяти, где программы сохраняют значения. Переменная создается путем присвоения ей имени в любом месте программы. Имена могут состоять из букв и цифр, но первым символом должна быть буква. Имена 7 переменных не должны содержать пробелов, подчеркивания (_). Примеры правильных имен: но могут содержать знак X, y1, FфGж19, ПроцСтавка, Mon_Income. Переменные могут хранить все типы данных - арифметические, текстовые, логические и даты. Тип переменных совпадает с типом данных, которые они содержат. В процессе выполнения программ значения переменных могут неоднократно меняться. 2.4. Символы арифметических операций + сложение вычитание * умножение / деление ^ возведение в степень \ целочисленное деление Mod остаток от деления & конкатенация 2.5. Встроенные функции Имена встроенных в VBA функций не всегда совпадают с соответствующими функциями Excel: Имя для Описание VBA Abs Абсолютное значение Log Натуральный логарифм Показательная функция с Exp основанием e Извлечение квадратного Sqr корня Округление Int отбрасыванием дробной части Генерация случайных чисел, равномерно Rnd распределенных на отрезке [0, 1] Abs(- 4) = 4 Log(1) = 0 Имя для Excel ABS LN Exp(1) = 2.71 EXP Sqr(9) = 3 КОРЕНЬ Int(2,6) = 2 Int(-1,2) = -2 ЦЕЛОЕ Rnd() (аргумент не требуется) СЛЧИС Пример Хуже того, в случае логарифма, например, Log в VBA — это натуральный логарифм, а в рабочем листе Excel LOG — логарифм по произвольному основанию (по умолчанию — 10). Поэтому будьте внимательны при использовании знакомых функций и пользуйтесь справкой! 8 2.6. Арифметические выражения Арифметические выражения строятся из арифметических констант, переменных, функций и операций над ними. Частным случаем выражения является константа, переменная или функция. 3.14 константа X1 переменная Cos(1.57) функция 3*X^2 + z1 эквивалентно обычной записи 3 X 2 z1 a 2+a/b/c эквивалентно 2 bc 2 a (2+a)/b*c эквивалентно c b 4 cos(x y) (4+Cos(x+y))/(1+z) эквивалентно 1 z Необходимо помнить, что вычисления выполняются слева направо в соответствии со старшинством операций. Самой старшей является операция вычисления значения функции, например Sin(X). Затем идет операция возведения в степень. Далее — умножение и деление. Самым низким приоритетом обладают операции сложения и вычитания и выполняются в последнюю очередь. Если выражение содержит круглые скобки, то выражения в скобках вычисляются первыми. 2.7. Операция объединения (конкатенации) строк Указанная операция обозначается знаком & и позволяет «склеивать» текстовые константы и текстовые переменные. Пример: "Дорог" & "ой" равно "Дорогой" "mr. " & " Brown" равно "mr. Brown" 2.8. Символы операций сравнения = равно <> неравно < меньше > больше <= меньше или равно >= больше или равно Like сравнение строк Is сравнение объектных переменных Примеры использования операторов сравнения: 5 >= 4 равно True "Миша" = "Маша" равно False (текстовые константы не равны). "Маша" > "Миша" равно False («а» по алфавиту идет раньше «и») -1 = True равно True (числовое значение True -1) 0 <> False равно False (числовое значение False 0) 9 "Маша" Like "М*а" равно True (* заменяет любое количество любых символов) "Маша" Like "М?[а-я]а" равно True (? заменяет один любой символ, [а-я] заменяет любой символ в диапазоне от «а» до «я»). 2.9. Символы логических операций Not логическое отрицание And логическое умножение (логическое «И») Or логическое сложение (логическое «ИЛИ») Xor исключающее «ИЛИ» Imp импликация (логическое следование) Eqv логическая эквивалентность Пусть переменные L1 и L2 принимают логические значения. Следующая таблица (таблица истинности) содержит результаты логических операций для всех возможных комбинаций значений аргументов. L1 L2 Not L1 L1 And L2 L1 Or L2 L1 Xor L2 L1 Imp L2 L1 Eqv L2 True True False True True False True True True False False False True True True False False True True False True True False False False False True False False False True True 2.10. Логические выражения False константа; True And 7 < 1 равно False; True Or 8 = 9 равно True; x1+x2 < 0 значение зависит от значений переменных x1 и x2; X < 100 And X >= 50 значение зависит от значения X; 10 2.11. Приоритеты операторов Арифметические выше———————ниже Возведение в степень (^) Унарный минус (–) Умножение и деление (*, /) Целочисленное деление (\) Остаток от деления (Mod) Сложение и вычитание (+, –) Конкатенация (&) Обратите внимание, что в VBA приоритет возведения в степень (^) выше, чем унарного минуса, а в ячейках Excel — наоборот. То есть в VBA: -1^2 = -1, в Excel: -1^2 = 1 Сравнение выше————————ниже Равно (=) Неравно (<>) Меньше (<) Больше (>) Меньше или равно (<=) Больше или равно (>=) Like Is Оператор Is используется для сравнения переменных, указывающих на объекты. 11 Логические выше——————ниже Отрицание Not Логическое умножение And Логическое сложение Or Исключающее «ИЛИ» Xor Логическая эквивалентность Eqv Импликация Imp 2.12. Оператор присваивания В общем виде оператор присваивания записывается следующим образом: V = A, где V - переменная (имя переменной), A - выражение (арифметическое, логическое или текстовое). При выполнении оператора вначале вычисляется значение выражения A (если выражение не является константой), а затем оно присваивается переменной V. Следовательно, оператор присваивания не является равенством в математическом смысле. Оператор X = X + 1 записан правильно. Здесь производится сложение величины X с константой 1 и результат снова присваивается переменной X. Примеры операторов присваивания: ПроцСтавка = 0,13 x1 = 1500 + 200 ПодНалог = ПроцСтавка * x1 В следующем примере переменной FullName присваивается конкатенация (сумма) двух текстовых констант, в результате чего значение переменной станет равно "Иванов И. И.": FullName = "Иванов " & "И. И." В результате выполнения следующих операторов значение переменной X будет равно 9: X = 1 X = X+2 X = 3*X 2.13. Объявление переменных Dim имя1, имя2, … Здесь имяn — имя переменной. Перед использованием переменные должны быть объявлены. По умолчанию, VBA не требует обязательного объявления переменных, однако опыт показывает, 12 что написание программ без объявления переменных часто приводит к трудноуловимым ошибкам. Рассмотрим, например, следующий фрагмент: Alpha = 2 Beta = 3 Gamma = Alfa + Beta Чему будет равно значение Gamma? Нет, не 5, а 3. Нашли ошибку? Если мы в первый раз используем переменную, ее значение равно 0. В приведенном фрагменте ошибку найти несложно, а как с программой длиной хотя бы в 100 строк? Чтобы VBA требовал обязательного объявления переменных, достаточно в самом начале модуля вписать строчку Option Explicit Если выполнить команду Tools, Options, в диалоговом окне Options, во вкладке Editor поставить флажок Require Variable Declaration: то VBA будет вставлять оператор Option Explicit автоматически в начале каждого нового модуля. Этот флажок нужно обязательно включить! Если в нашем примере мы включим обязательное объявление переменных, и опишем их таким образом: Dim Alpha, Beta, Gamma то при попытке выполнения этой программы VBA выдаст сообщение об ошибке Таким образом, мы, по крайней мере, будем знать, что в коде есть ошибка, и не будем гадать, почему у нас 2 + 3 = 3! Уже объявленными считаются переменные: совпадающие с именем функции, перечисленные внутри скобок при объявлении функции. Поэтому, не пытайтесь внутри функции или процедуры объявлять такие переменные — вы получите сообщение об ошибке. 13 2.14. Несколько операторов в одной строке и перенос оператора В одной строке через двоеточие можно записать несколько операторов. Например, T = "a1" : X1 = 0.13 * Y : X2 = X1 / 3.14 Для переноса оператора подчеркивания ( _ ), например, на следующую строку используется символ Expenses = Price*2000 + _ Tax*2500 + 500 2.15. Структура функции Текст функции должен содержать как минимум три строки. Function Z(x, y) Z = 2*x*y End Function Первая строка (строка заголовка) содержит имя функции, после которого обязательны скобки. В скобках указываются имена аргументов (переменных). Третья строка содержит оператор конца функции. Группа операторов, находящихся между первой и последней строками, называется телом функции. Тело функции должно содержать по крайней мере один оператор присваивания, в левой части которого находится переменная, имя которой совпадает с именем функции. В приведенном примере тело функции состоит из одного такого оператора. 2.16. Структура процедуры Текст процедуры состоит из строки заголовка, тела и заключительной строки. После имени процедуры идут пустые скобки. Например, Sub Пример() End Sub У процедуры не должно быть аргументов, иначе Excel не выведет имя процедуры в списке макросов. В рассмотренной процедуре отсутствует тело, поэтому она ничего не делает. Бывают ли процедуры с аргументами? Разумеется, бывают. Однако такие процедуры могут быть вызваны только из другой процедуры или функции. Например: Sub Hello(s,t) MsgBox s,,t End Sub Sub myProc() Call Hello("Всем привет", "Приветствие") End Sub Здесь процедура Hello вызывается с использованием оператора Call. В этом сдучае аргументы должны быть в скобках. Процедуру можно вызвать и так: Sub myProc() Hello "Всем привет", "Приветствие" End Sub без использования Call. В этом случае скобки не обязательны. 14 2.17. Ввод данных в диалоговом режиме. Функция InputBox Рассмотрим пример процедуры: Sub Приветствие () Dim user ' Объявляем переменные user = InputBox ("Ваше имя? ") MsgBox "Привет, " + user End Sub Данная процедура создает переменную с именем user и присваивает ей значение, вводимое пользователем в диалоговое окно, содержащее текст "Ваше имя? ". Затем процедура выводит конкатенацию текстовой константы "Привет, " и значения переменной user. В следующем примере функции InputBox передаются три аргумента, смысл которых пояснен в комментариях: Sub Ввод() Dim Message, Title, Default,MyValue ' Объявляем переменные Message = "Введите число между 1 и 3" ' Сообщение Title = "Окно ввода" ' Заголовок Default = "1" ' Начальное значение переменой MyValue = InputBox(Message, Title, Default) End Sub 2.18. Однострочный If / Then Общий вид оператора: If L Then P, где L - логическое выражение, P - оператор. Действие: если L истинно (равно True), то выполняется оператор P, если L ложно (равно False), то происходит переход к следующей строке без выполнения оператора P. Пример. Следующая функция вычисляет частное от деления двух чисел, если делитель не равен нулю: Function Частн(x,y) If y <> 0 Then Частн = x/y End Function Пример. Следующая функция находит максимум из двух чисел: Function Максимум(x,y) Максимум = y If x > y Then Максимум = x End Function 2.19. Многострочный If / Then / End If If L Then P1 P2 ... Pn End If Здесь L - логическое выражение, 15 P1, P2, ..., Pn – операторы. Действие: если L истинно (равно True), то цепочка операторов P1,..., Pn выполняется, если L ложно (равно False), то не выполняется. Пример. Следующая функция вычисляет корень четвертой степени из неотрицательного числа с помощью квадратного корня: Function Корень4(x) Dim Кор2 If x >= 0 Then Кор2=sqr(x) „ Кор2 - промежуточная переменная Корень4=sqr(Кор2) End If End Function 2.20. Оператор If / Then / Else / End If If L Then P1 ... Pn Else Q1 ... Qm End If Здесь L - логическое выражение, P1,..., Pn, Q1,..., Qm - операторы. Действие: если L истинно (равно True), то выполняется цепочка операторов P1,..., Pn, если L ложно (равно False), то выполняется цепочка операторов Q1,..., Qm. Пример. Функция y x 1, x 0 2 x, x 0 реализуется следующим текстом: Function MyFun(x) If x < 0 Then MyFun = x + 1 Else MyFun = 2 * x End If End Function 2.21. Оператор Select Case / Case / Case Else / End Select Select Case A Case A1 P1 16 .... Case An Pn Case Else Ps End Select Здесь A – выражение, A1,A2,...,An – подмножества множества значений А. Действие: отличается от предыдущего тем, что, если текущее значение выражения A не вошло ни в какое из подмножеств A1,A2,...,An, то выполняется оператор Ps. 0, x Пример. Написать на VBA функцию y 0,2, 1 1 x 3 0,7, 3 x 5 1, x 5 Function FunInt(X) Select Case X Case Is <= -1 ' Is заменяет текущее значение ' переменной X. Не путать с оператором сравнения Is! FunInt = 0 Case -1 To 3 FunInt = 0,2 Case 3 To 5 FunInt = 0,7 Case Else ' эквивалентная запись ' Case Is > 5 FunInt = 1 End Select End Function 2.22. Оператор цикла For / Next For I = start To end P1 ... Pn Next I Здесь I – переменная (счетчик), start – начальное значение счетчика, end – конечное значение счетчика, P1, ..., Pn – операторы. Действие: 17 цепочка P1, ..., Pn повторяется до тех пор, пока значение счетчика не станет больше end; после каждого выполнения цепочки P1, ..., Pn значение счетчика увеличивается на 1; начальное значение счетчика равно start. Пример. Следующая функция возвращает сумму последовательных чисел от N1 до N2: Function Сумм1(N1,N2) Dim k Сумм1 = 0 For k =N1 To N2 Сумм1 = Сумм1 + k Next k End Function Например, Сумм1(3, 5) возвращает 12. 2.23. Оператор цикла DO While / Loop Do While L P1 ... Pn Loop Здесь L - логическое выражение, P1, ..., Pn - операторы. Действие: если L истинно (True), то цепочка P1, ..., Pn повторяется до тех пор, пока L не станет False; если L ложно, управление передается за пределы группы. Пример. Следующая функция находит сумму всех чисел от заданного до 100 включительно: Function Сумм100(Nstart) Dim n Сумм100 = 0 ' начальное значение суммы n = Nstart Do While n < =100 Сумм100 = Сумм100 + n n = n + 1 Loop End Function Например, Сумм100(99) возвращает 199, а, например, Сумм100(101) возвращает 0, так как оператор цикла не будет выполняться ни разу. 18 2.24. Оператор цикла Do Until / Loop Do Until L P1 ... Pn Loop Здесь L – логическое выражение, P1, ..., Pn – операторы. Действие: если L ложно (False), то цепочка P1, ..., Pn повторяется до тех пор, пока L не станет True; если L истинно, управление передается за пределы группы. Пример. Следующая процедура все время делает запрос на ввод пароля, пока последний введенный пароль не будет равен "Stud123" : Sub PassWord() Dim PW PW = " " ' начальное значение пароля - пробел Do Until PW = "Stud123" PW = InputBox( "Пароль?" ) Loop End Sub 2.25. Оператор выхода Exit Для немедленного выхода из процедуры, функции или оператора цикла используются следующие операторы: Exit Sub Exit Function Exit For Exit Do 2.26. Оператор объявления массива Пример объявления одномерного массива (каждый элемент массива имеет свой номер – индекс): Dim Arr (1 To 3). Этот оператор создает массив с именем Arr, содержащий 3 элемента: Arr(1), Arr(2), Arr(3). Пример объявления двумерного массива (каждый элемент массива имеет два номера – индекса по аналогии с элементами матрицы): Dim М(1 To 2, 1 To 3). 19 Этот оператор создает массив с именем М размерности 2 х 3 (2 строки и 3 столбца). Всего массив содержит 6 элементов: М(1,1), М(1,2), М(1,3), М(2,1), М(2,2), М(2,3) 2.27. Присваивание значений элементам массива После того, как массив объявлен, каждый его элемент становится независимой позицией для любого значения, которое нужно хранить. Следующая процедура создает массив и присваивает значения каждому его элементу: Sub Sample() Dim Ms(1 To 3) Ms(2) = 124 Ms(1) = "Январь" Ms(3) = True End Sub Обратим внимание, что значения присваиваются элементам не по порядку и даже не являются данными одного и того же типа. Следующая процедура создает массив, содержащий квадраты натуральных чисел от 1 до 100: Sub Квадраты() Dim Sq(1 To 100) Dim n For n = 1 To 100 Sq(n) = n ^ 2 Next n End Sub 2.28. Вложенные циклы Данная процедура создает массив Mat размерности 3x4, каждый элемент которого равен сумме номера строки и удвоенного номера столбца, т.е. Mat(i, j ) i 2 * j Sub CreateArray() Dim Mat(1 To 3, 1 To 4) Dim Строка, Столбец For Строка = 1 To 3 For Столбец = 1 To 4 Mat(Строка, Столбец) = Строка + 2*Столбец Next Столбец Next Строка End Sub Здесь внутри цикла по переменной Строка расположен цикл по переменной Столбец. 2.29. Процедуры ввода данных в ячейки. Свойства Cells и Range Согласно правилам VBA , запись Cells(2,3) означает обращение к ячейке, расположенной во 2-й строке и 3-м столбце (т.е. к C2) активного рабочего листа. 20 Примеры: Cells(3,1) = 100 ячейке А3 из активного рабочего листа присваивается числовое значение 100; ddd = Cells(2, 4) переменной ddd присваивается значение ячейки D2 активного рабочего листа. При запуске процедуры, заполняющей ячейки активного рабочего листа, надо следить за тем, чтобы активным был именно нужный рабочий лист, а не какой–то другой лист или даже объект, например, диаграмма. В последнем случае будет выдано сообщение об ошибке. Для заполнения одним и тем же значением диапазона ячеек можно воспользоваться записью Range(). Пример: Range("A1:C5") = "Hello!" всем ячейкам в диапазоне A1:C5 активного рабочего листа будет присвоено текстовое значение "Hello!". Альтернативный вариант: Range(Cells(1,1),Cells(5,3)) = "Hello!" Пример Написать на VBA процедуру, формирующую на активном рабочем листе матрицу размерности 7 9 по общей формуле элемента: 8 * sin(10i ) * cos(20 j ) . ij Расположить матрицу, начиная с ячейки A1. a Sub MakeMatr() Dim i, j For i = 1 To 7 For j = 1 To 9 Cells(i, j) = 8 * Sin(10 * i) * Cos(20 * j) Next j Next i End Sub При необходимости работать с ячейками определенного используется префикс Worksheets() с указанием имени листа. Примеры: рабочего листа Worksheets("Баланс").Cells(3,1) = 13.5 ячейке А3 из рабочего листа с именем «Баланс» присваивается числовое значение 13.5; Worksheets("Лист1").Range("A1:C5").Font.Bold = True ячейки A1:C5 листа «Лист 1» форматируется жирным шрифтом. 21 2.30. Ввод формул в ячейки. Свойства Formula и FormulaLocal Свойствами Cells() и Range() можно воспользоваться и для ввода формул в ячейки рабочего листа. Для это применяются свойства Formula и FormulaLocal. Пример: Range("A10").Formula = "=sin(b2)^2+1" В ячейку A10 активного рабочего листа будет введена формула =SIN(B2)^2+1. Теперь попробуем ввести функцию СУММ(): Range("C1").Formula = "=сумм(A1:A5)" Мы точно знаем, что функция СУММ существует. В чем же дело? Проблема заключается в том, что VBA не понимает переведенные на русский язык имена функций. Если использовать английское имя функции — SUM, то все будет нормально: Range("C2").Formula = "=sum(A1:A5)" Обратите внимание, что имя функции Excel «перевел» на русский. Соответствие русских и английских имен функций можно посмотреть в файле FUNC.XLS, для версии MS Office 2007 обычно находящемся в папке «C:\Program Files\Microsoft Office\Office12\1049». Если вы все-таки предпочитаете русские имена функций, то можно воспользоваться свойством FormulaLocal: Range("C3").FormulaLocal = "=сумм(A1:A5)" В этом случае имя функции будет распознано правильно, и в ячейке C3 вы получите число 15. Вы можете использовать тот или другой метод по своему вкусу. Следует однако учесть, что если ваш макрос попадет на компьютер, на котором установлена, например, немецкая версия Office, то вариант с использованием FormulaLocal работать не будет (по-немецки функция суммирования называется SUMME). 2.31. Оператор With Если надо интенсивно поработать с ячейками определенного рабочего листа, то каждый раз перед Cells() вводить префикс Worksheets() довольно утомительно. 22 Облегчить нам жизнь призван оператор With, с помощью которого мы дадим VBA знать, с каким объектом мы собираемся сейчас работать. With O P1 … Pn End With Здесь O — переменная, указывающая на объект, например, Worksheets("Лист2"). Пример: With Worksheets("Лист3") .Cells(1,1) = "Фамилия" .Cells(1,2) = "Имя" .Range("A1:B1").Font.Bold = True .Cells(2,1) = "Пупкин" .Cells(2,2) = "Вася" Cells(3,3) = "Oops…" ' Ячейка C3 активного листа End With Обратите внимание на точку перед Cells(). Если ее не поставить, то Cells() (и Range()) будет относится к активному рабочему листу. 2.32. Функции с аргументами–массивами. Свойство COUNT Слово Count, добавленное через точку к имени массива–аргумента, позволяет определить количество элементов в этом массиве. В качестве аргумента–массива может выступать любой диапазон ячеек. Пример. Пусть Mat имя аргумента некоторой функции. Если в качестве этого аргумента ввести диапазон A1:B4, то в результате выполнения оператора KOL = Mat.Count переменной KOL будет присвоено значение 8 (количество ячеек в диапазоне A1:B4). Пример. Написать функцию, возвращающую количество отрицательных элементов диапазона (массива, матрицы) произвольной размерности. Function КолОтриц(arr) Dim КолЭлем, i КолЭлем = Arr.Count 'кол–во элементов в массиве КолОтриц = 0 For i = 1 To КолЭлем If arr(i) < 0 Then КолОтриц = КолОтриц + 1 Next i End Function 23 Напомним, что вводить массив-аргумент можно методом указания, маркируя с помощью мыши бегущей пунктирной линией нужный диапазон ячеек. Пример обращения к рассмотренной функции: = КолОтриц(A1:D5). Пример. Написать функцию, подсчитывающую число случаев, когда элементы, расположенные на одинаковых местах в двух массивах одинаковой размерности, совпадают по величине. Function КолСовп(Arr1, Arr2) Dim КолЭл1, КолЭл2, i КолЭл1 = Arr1.Count КолЭл2 = Arr2.Count If КолЭл1<> КолЭл2 Then КолСовп ="ОШИБКА" ' несовпадение _ количеств элементов Exit Function Else КолСовп = 0 For i = 1 To КолЭл1 If arr1(i) = arr2(i) Then КолСовп = КолСовп + 1 Next i End If End Function 2.33. Объект WorksheetFunction Для использования некоторых функций, обычно используемых на рабочем листе Excel, в VBA надо использовать префикс WorksheetFunction. Например: U = WorksheetFunction.Min(3, 7, 1); S1 = WorksheetFunction.Max(8, 7); Дисперсия = WorksheetFunction.Var(8, 7, 9); Среднее = WorksheetFunction.Average(8, 7). Полный список функций рабочего листа русской версии Excel, имеющих соответствующие методы в WorksheetFunction, приведен в приложении II. 24 Глава 2 ПЕРЕМЕННЫЕ, ТИПЫ ДАННЫХ И ОБЛАСТИ ВИДИМОСТИ 25 Глава 3 ОТЛАДКА МАКРОСОВ 26 Глава 4 ВВОД ДАННЫХ С ИСПОЛЬЗОВАНИЕМ ФОРМ 27 Глава 5 ЗАДАЧИ 1. Аргументы: x, y, z. Функция вычисляет среднее арифметическое аргументов по x y z формуле СрАрифм . Имя функции СрАрифм. 3 Function СрАрифм(x,y,z) СрАрифм = ( x + y + z ) / 3 End Function 2. Аргументы: x, y, z. Функция вычисляет среднее геометрическое аргументов по формуле СредГеом 3 xyz . Function СредГеом(x,y,z) СредГеом = ( x * y * z ) ^ ( 1 / 3 ) End Function 3. Аргументы: S – исходная сумма, p – годовая процентная ставка, t – количество лет. Функция вычисляет наращенную сумму по формуле простых процентов p ПросПроц S (1 t) . 100 Function ПросПроц(S, p, t) ПросПроц = S * ( 1 + p / 100 * t ) End Function 3.1. Протабулировать функцию ПросПроц для t = 1, 2, …, 10 при значениях: S = 10, p = 5. Построить график. 4. Аргументы: S – исходная сумма, p – годовая процентная ставка, t – количество лет. Функция вычисляет наращенную сумму по формуле сложных процентов p t СложПроц S (1 ) . 100 Function СложПроц(S, p, t) СложПроц = S * ( 1 + p / 100 ) ^ t End Function 4.1. Протабулировать функцию СложПроц для t = 1, 2, …, 10 при значениях: S = 10, p = 5. Построить график. 5. Аргументы x, y, z. Функция вычисляет разность межу наибольшим и наименьшим значениями из трех. Имя функции Размах. 28 Function Размах(x, y, z) Dim Макс, Мин Макс = x If y > Макс then Макс If z > Макс then Макс Мин = x If y < Мин then Мин = If z < Мин then Мин = Размах = Макс - Мин End Function = y = z y z 6. Параметры: P – договорная цена исполнения, i – премия. Аргумент X – реальная цена актива в момент исполнения опциона 6.1. Написать алгоритм, вычисляющий прибыль покупателя опциона колл по i, X P формуле ПокупКолл X P i, X P Решение 1. Function ПокупКолл(P, i, X) Dim S If X <= P Then S = -i Else S = X – P – i End If ПокупКолл = S End Function Решение 2. Function ПокупКолл(P, i, X) Dim S S = Iif(X <= P, -i, X – P – i) ПокупКолл = S End Function 6.2. Функция вычисляет прибыль продавца опциона колл по формуле i, X P ПродКолл X P i, X P 6.3. Функция вычисляет прибыль покупателя опциона пут по формуле P X i, X P ПокупПут i, X P 7. Известно, что график линейной функции y kx b проходит через точки A(x1,y1) и B(x2,y2). Константы определяются по формулам 29 k y1 y 2 , b x1 x 2 y1 kx1 7.1. Написать алгоритм, вычисляющий значение функции для произвольного значения x. Решение. Function lin(x1, y1, x2, y2, x) Dim k, b k = (y1 - y2) / (x1 - x2) b = y1 - k * x1 lin = k * x + b End Function 7.2. Учесть область допустимых значений параметров x1,x2,y1,y2. Решение. Так как делить на нуль нельзя, добавляется условный оператор: Function lin(x1, y1, x2, y2, x) Dim k, b If x1 = x2 Then lin = "Недопустимые параметры" Exit Function End If k = (y1 - y2) / (x1 - x2) b = y1 - k * x1 lin = k * x + b End Function 8. Известно, что график степенной функции y kx a проходит через точки A(x1,y1) и B(x2,y2). Константы определяются по формулам ln y1 ln y 2 y1 а ,k ln x 2 ln x1 x1a 8.1. Написать алгоритм, вычисляющий значение функции для произвольного значения x. Решение. Function степ(x1, y1, x2, y2, x) Dim a, k a = (Log(y1) - Log(y2)) / (Log(x2) - Log(x1)) k = y1 / x1 ^ a степ = k * x ^ a End Function 8.2. Учесть область допустимых значений параметров x1,x2,y1,y2. Решение. Логарифмы определены только для положительных значений. Делить на нуль нельзя. Добавляется условный оператор: 30 Function степ(x1, y1, x2, y2, x) Dim a, k If x1 <= 0 Or y1 <= 0 Or x2 <= 0 Or y2 <= 0 Or x1 = x2 Then степ = "Недопустимые параметры" Exit Function End If a = (Log(y1) - Log(y2)) / (Log(x2) - Log(x1)) k = y1 / x1 ^ a степ = k * x ^ a End Function 8.3. Учесть область допустимых значений аргумента x Решение. Возведение в произвольную степень определено для положительных чисел, поэтому добавляется еще один условный оператор: Function степ(x1, y1, x2, y2, x) Dim a, k If x1 <= 0 Or y1 <= 0 Or x2 <= 0 Or y2 <= 0 Or x1 = x2 Then степ = "Недопустимые параметры" Exit Function End If a = (Log(y1) - Log(y2)) / (Log(x2) - Log(x1)) k = y1 / x1 ^ a If x<= 0 Then степ = “X – недопустим” Exit Function End If степ = k * x ^ a End Function 8.4. Построить график функции step на отрезке [1; 6] c шагом 0,5 для следующих значений параметров x1=1, y1=5, x2=6, y2=2. 9. Написать функцию, вычисляющую в зависимости от x сумму 20 xm m2 т 1 Решение Function mySum(x) Dim s, m s = 0 For m = 1 To 20 s = s + x^m*m^2 Next m mySum = s End Function 31 10. Написать функцию, вычисляющую в зависимости от x произведение 10 x 1 n 2 n 1 Решение Function myProd(x) Dim p, n p = 1 For n = 1 To 10 p = p * ( 1 – x / (n+2) ) Next n myProd = p End Function Задача. Написать функцию, которая возвращает значение максимального корня приведенного квадратного уравнения x 2 px q 0 . Аргументами функции являются коэффициенты уравнения. Если уравнение не имеет корней, вывести соответствующее сообщение и возвратить текстовое значение "пусто". Решение Function xMAX(p, q) Dim D D = p ^ 2 - 4 * q 'дискриминант If D >= 0 Then xMAX = (-p + Sqr(D)) / 2 Else MsgBox "Нет корней" xMAX = "пусто" End If End Function Задача. Написать процедуру, которая запрашивает число, и если введенное число положительно, выдает соответствующее сообщение. Sub Положит() Dim number number = InputBox("Введите число") If number > 0 Then MsgBox "Число "+number+" положительно" End Sub Задача. Написать функцию 32 Function myfun(x) Select Case x Case Is < 0, 1, 1.9, 2 To 3 myfun = 2 * x Case 3 To 4, 10 To 20 myfun = 3 * x Case 50 To 70, Is >= 100 myfun = 4 * x Case Else myfun = 5 * x End Select End Function 33 Глава 6 Приложения Приложение I Свод основных операторов Структура функции Function Z(x, y) Z = 2*x*y End Function Структура процедуры Sub Пример() End Sub Структура процедуры с аргументами Sub Пример(x, y) End Sub Вызов процедуры [Call] Пример[(]x, y[)] End Sub При использовании Call скобки обязательны Объявление переменных Dim x, y, z Функция MsgBox MsgBox "Сообщение" Оператор присваивания V=A Однострочный If If L Then P Многострочный If If L Then P1 ... Pn End If Оператор If / Then / Else 34 If L Then P1 ... Pn Else Q1 ... Qm End If Оператор For / Next For i = start To end P1 ... Pn Next i Оператор Do While / Loop Do While L P1 ... Pn Loop Оператор Do Until / Loop Do Until L P1 ... Pn Loop Оператор Select Case Select Case A Case A1 P1 Case A2 P2 .... Case An Pn [ Case Else Ps ] End Select Оператор объявления массива Dim Arr (1 To 3) Dim МATR(1 To 3, 1 To 5) Оператор With With Worksheets("Лист3") .Cells(1,1) = "Данные" .Range("A1:B1").Font.Bold = True End With Несколько операторов в одной строке. Символ “:” T = "a1" : X1 = 45.3 : Н = 0.1* Y Оператор выхода Exit Exit Sub Exit Function Exit For Exit Do Знак переноса оператора на другую строку “_” Функция InputBox Sub Hi() user = InputBox ("Ваше имя?") MsgBox "Привет, " + user Метод Cells Cells(3, 2)= 1.12 D = Worksheets("Лист1").Cells(2, 4) Метод Range Range("B3")= 1.12 D = Worksheets("Лист1").Range("B3") Expenses = Price*2000 + _ Tax*2500 + 55.6 Свойство Count Function S( Mas ) S = Mas.Count End function Объект WorksheetFunction U = WorksheetFunction.Min(3, 7, 1); S1 = WorksheetFunction.Max(8, 7). Приложение II Функции рабочего листа и соответствующие методы объекта WorksheetFunction ACOS ACOSH ASC ASIN ASINH ATAN2 ATANH COSH CTABKA DBSC FРАСП FРАСПОБР Acos Acosh Asc Asin Asinh Atan2 Atanh Cosh Rate Dbcs FDist FInv LN LOG LOG10 SINH TANH ZТЕСТ АМОРУВ АМОРУМ АПЛ АСЧ БДДИСП БДДИСПП Ln Log Log10 Sinh Tanh ZTest AmorLinc AmorDegrc Sln Syd DVar DVarP 35 БДПРОИЗВЕД БДСУММ БЕССЕЛЬ.I БЕССЕЛЬ.J БЕССЕЛЬ.K БЕССЕЛЬ.Y БЕТАОБР БЕТАРАСП БЗРАСПИС БИЗВЛЕЧЬ БИНОМРАСП БС БСЧЁТ БСЧЁТА ВЕЙБУЛЛ ВЕРОЯТНОСТЬ ВОСЬМ.В.ДВ ВОСЬМ.В.ДЕС ВОСЬМ.В.ШЕСТН ВПР ВСД ВЫБОР ГАММАНЛОГ ГАММАОБР ГАММАРАСП ГИПЕРГЕОМЕТ ГПР ГРАДУСЫ ДАТАКУПОНДО ДАТАКУПОНПОСЛЕ ДАТАМЕС ДВ.В.ВОСЬМ ДВ.В.ДЕС ДВ.В.ШЕСТН ДВФАКТР ДДОБ ДЕЛЬТА ДЕНЬНЕД ДЕС.В.ВОСЬМ ДЕС.В.ДВ ДЕС.В.ШЕСТН ДИСП ДИСПР ДЛИТ ДМАКС 36 DProduct DSum BesselI BesselJ BesselK BesselY BetaInv BetaDist FVSchedule DGet BinomDist Fv DCount DCountA Weibull Prob Oct2Bin Oct2Dec Oct2Hex VLookup Irr Choose GammaLn GammaInv GammaDist HypGeomDist HLookup Degrees CoupPcd CoupNcd EDate Bin2Oct Bin2Dec Bin2Hex FactDouble Ddb Delta Weekday Dec2Oct Dec2Bin Dec2Hex Var VarP Duration DMax ДМИН ДНЕЙ360 ДНЕЙКУПОН ДНЕЙКУПОНДО ДНЕЙКУПОНПОСЛЕ ДОВЕРИТ ДОЛЛСША ДОЛЯГОДА ДОХОДКЧЕК ДОХОДПЕРВНЕРЕГ ДОХОДПОГАШ ДОХОДПОСЛНЕРЕГ ДОХОДСКИДКА ДСРЗНАЧ ДСТАНДОТКЛ ДСТАНДОТКЛП ДФОШ ЕЛОГИЧ ЕНД ЕНЕТЕКСТ ЕНЕЧЁТ ЕОШ ЕОШИБКА ЕСЛИ ЕТЕКСТ ЕЧЁТН ЕЧИСЛО ЗАМЕНИТЬ ЗАМЕНИТЬБ И ИЛИ ИНДЕКС ИНОРМА КВАДРОТКЛ КВАРТИЛЬ КВПИРСОН КВПИРСОН КОВАР КОМПЛЕКСН КОНМЕСЯЦА КОРЕНЬПИ КОРРЕЛ КПЕР КРИТБИНОМ ЛГРФПРИБЛ DMin Days360 CoupDays CoupDayBs CoupDaysNc Confidence USDollar YearFrac TBillYield OddFYield YieldMat OddLYield YieldDisc DAverage DStDev DStDevP ErfC IsLogical IsNA IsNonText IsOdd IsErr IsError IfError IsText IsEven IsNumber Replace ReplaceB And Or Index IntRate DevSq Quartile RSq RTD Covar Complex EoMonth SqrtPi Correl NPer CritBinom LogEst ЛИНЕЙН ЛОГНОРМОБР ЛОГНОРМРАСП МАКС МВСД МДЛИТ МЕДИАНА МИН МНИМ.ABS МНИМ.COS МНИМ.EXP МНИМ.LN МНИМ.LOG10 МНИМ.LOG2 МНИМ.SIN МНИМ.АРГУМЕНТ МНИМ.ВЕЩ МНИМ.ДЕЛ МНИМ.КОРЕНЬ МНИМ.ПРОИЗВЕД МНИМ.РАЗН МНИМ.СОПРЯЖ МНИМ.СТЕПЕНЬ МНИМ.СУММ МНИМ.ЧАСТЬ МОБР МОДА МОПРЕД МУЛЬТИНОМ МУМНОЖ НАИБОЛЬШИЙ НАИМЕНЬШИЙ НАЙТИ НАЙТИБ НАКЛОН НАКОПДОХОД НАКОПДОХОДПОГАШ НЕЧЁТ НОД НОК НОМИНАЛ НОМНЕДЕЛИ НОРМАЛИЗАЦИЯ НОРМОБР НОРМРАСП LinEst LogInv LogNormDist Max MIrr MDuration Median Min ImAbs ImCos ImExp ImLn ImLog10 ImLog2 ImSin ImArgument ImReal ImDiv ImSqrt ImProduct ImSub ImConjugate ImPower ImSum Imaginary MInverse Mode MDeterm MultiNomial MMult Large Small Find FindB Slope AccrInt AccrIntM Odd Gcd Lcm Nominal WeekNum Standardize NormInv NormDist НОРМСТОБР НОРМСТРАСП ОБЩДОХОД ОБЩПЛАТ ОКРВВЕРХ ОКРВНИЗ ОКРУГЛ ОКРУГЛВВЕРХ ОКРУГЛВНИЗ ОКРУГЛТ ОСИ ОСПЛТ ОТРБИНОМРАСП ОТРЕЗОК ПЕРЕСТ ПЕРЕСТ ПЕРСЕНТИЛЬ ПЕЧСИМВ ПИ ПИРСОН ПЛТ ПОВТОР ПОДСТАВИТЬ ПОИСК ПОИСКБ ПОИСКПОЗ ПОЛУЧЕНО ПОРОГ ПРЕДСКАЗ ПРЕОБР ПРОИЗВЕД ПРОМЕЖУТОЧНЫЕ.ИТОГИ ПРОПНАЧ ПРОСМОТР ПРОЦЕНТРАНГ ПРОЦПЛАТ ПРПЛТ ПС ПУАССОН ПУО РАБДЕНЬ РАВНОКЧЕК РАДИАНЫ РАНГ РИМСКОЕ NormSInv NormSDist CumPrinc CumIPmt Ceiling Floor Round RoundUp RoundDown MRound BahtText Ppmt NegBinomDist Intercept Permut Phonetic Percentile Clean Pi Pearson Pmt Rept Substitute Search SearchB Match Received GeStep Forecast Convert Product Subtotal Proper Lookup PercentRank Ispmt Ipmt Pv Poisson Vdb WorkDay TBillEq Radians Rank Roman 37 РОСТ РУБЛЬ РУБЛЬ.ДЕС РУБЛЬ.ДРОБЬ РЯД.СУММ СЖПРОБЕЛЫ СКИДКА СКОС СЛУЧМЕЖДУ СРГАРМ СРГЕОМ СРЗНАЧ СРЗНАЧА СРЗНАЧА СРОТКЛ СТАНДОТКЛОН СТАНДОТКЛОНП СТЕПЕНЬ СТОШYX СТЬЮДРАСП СТЬЮДРАСПОБР СУММ СУММЕСЛИ СУММЕСЛИ СУММКВ СУММКВРАЗН СУММПРОИЗВ СУММРАЗНКВ СУММСУММКВ СЧЁТ СЧЁТЕСЛИ СЧЁТЕСЛИ СЧЁТЗ СЧИТАТЬПУСТОТЫ ТЕКСТ 38 Growth Dollar DollarDe DollarFr SeriesSum Trim Disc Skew RandBetween HarMean GeoMean Average AverageIf AverageIfs AveDev StDev StDevP Power StEyx TDist TInv Sum SumIf SumIfs SumSq SumXMY2 SumProduct SumX2MY2 SumX2PY2 Count CountIf CountIfs CountA CountBlank Text ТЕНДЕНЦИЯ ТРАНСП ТТЕСТ УРЕЗСРЕДНЕЕ ФАКТР ФИКСИРОВАННЫЙ ФИШЕР ФИШЕРОБР ФОШ ФТЕСТ ФУО ХИ2ОБР ХИ2РАСП ХИ2ТЕСТ ЦЕНА ЦЕНАКЧЕК ЦЕНАПЕРВНЕРЕГ ЦЕНАПОГАШ ЦЕНАПОСЛНЕРЕГ ЦЕНАСКИДКА ЧАСТНОЕ ЧАСТОТА ЧЁТН ЧИСЛКОМБ ЧИСЛКУПОН ЧИСТВНДОХ ЧИСТНЗ ЧИСТРАБДНИ ЧПС ШЕСТН.В.ВОСЬМ ШЕСТН.В.ДВ ШЕСТН.В.ДЕС ЭКСПРАСП ЭКСЦЕСС ЭФФЕКТ Trend Transpose TTest TrimMean Fact Fixed Fisher FisherInv Erf FTest Db ChiInv ChiDist ChiTest Price TBillPrice OddFPrice PriceMat OddLPrice PriceDisc Quotient Frequency Even Combin CoupNum Xirr Xnpv NetworkDays Npv Hex2Oct Hex2Bin Hex2Dec ExponDist Kurt Effect