- •Программирование в excel
- •Симферополь 2000
- •Факультет "Механизация сельского хозяйства" Программирование в excel
- •1. Основы программирования на vba
- •1.1. Создание, редактирование и запись программ
- •1.1.1. Запись макроса
- •1.1.2. Как найти макрос в проекте
- •1.1.3. Написание новой процедуры
- •Чем макрос отличается от процедуры
- •1.1.4. Процедуры типа Sub и Function
- •1.1.5. Закрытые и открытые процедуры
- •1.1.6. Использование значения, возвращаемого функцией
- •1.1.7. Выполнение процедуры Sub
- •1.1.8. Передача аргументов в процедуру
- •1.1.9. Именованные аргументы
- •1.1.10. Написание процедур для обработки событий
- •1.1.11. Где хранится код обработки события
- •1.1.12. Средства, ускоряющие написание программ
- •1.1.13. Как написать легкочитаемую программу
- •1.2. Переменные, константы и типы данных
- •1.2.1. Типы данных в Visual Basic
- •1.2.2. Объявление константы, переменной или массива
- •1.2.3. Объявление объектной переменной
- •1.2.4. Встроенные константы
- •1.3. Управляющие конструкции
- •1.3.1. Операторы ветвления
- •1.3.2. Операторы циклов
- •1.3.3. Вложение управляющих конструкций
- •1.3.4. Выход из циклов и процедур
- •1.4. Структура программы
- •2. Сортировка данных
- •2.1. Алгоритм сортировки обменами (алгоритм “пузырька”)
- •2.2. Алгоритм сортировки вставками
- •2.3. Алгоритм сортировки выбором элемента
- •2.4. Алгоритм быстрой сортировки (метод Хоора)
- •2.5. Алгоритм пирамиды (метод Уильямса-Флойда)
- •2.6. Учебные задачи по программированию сортировки данных
- •3. Работа vba с объектами Excel
- •3.1. Как получить справку по Visual Basic для Microsoft Excel
- •3.2. Объекты Microsoft Excel
- •3.3. Работа с объектом Application
- •3.4. Работа с объектом Workbook
- •3.4.1. Открытие рабочей книги
- •3.4.2. Закрытие рабочей книги
- •3.4.3. Создание и сохранение рабочей книги
- •3.5. Работа с объектом Range
- •3.6. Строковые ссылки в стиле а1 или имена диапазонов
- •3.6.1. Числовые индексы строк и колонок
- •3.6.2. Свойство Offset
- •3.6.3. Свойства CurrentRegion и UsedRange
- •3.6.4. Организация циклов для перебора ячеек диапазона
- •3.6.5. Применение свойства Address для отладки кода, работающего с объектом Range
- •3.7. Работа с событиями
- •3.7.1. Включение и отключение обработки событий
- •3.7.2. Использование событий, связанных с рабочими листами
- •3.7.3. События на уровне рабочего листа
- •3.7.4. События на уровне диаграммы
- •3.7.5. События на уровне рабочей книги
- •3.7.6. События на уровне приложения
- •3.7.7. Модули классов и события
- •4. Численные методы математики
- •4.1. Методы решения нелинейных уравнений
- •4.1.2. Метод деления отрезка пополам (метод дихотомии).
- •4.1.3. Метод Ньютона (касательных).
- •4.1.4. Метод хорд (секущих).
- •4.1.5. Метод итераций (метод последовательных приближений).
- •4.2.1. Теоретические сведения
- •4.2.2. Метод Крамера
- •4.2.3. Метод Гаусса
- •4.2.6. Метод Зейделя
- •4.3. Обработка экспериментальных данных
- •4.3.1. Задачи, которые возникают при обработке экспериментальных данных.
- •4.3.2. Интерполяция
- •4.3.2.1. Интерполяция функций
- •4.3.3.2. Определение параметров эмпирической формулы
- •4.4. Методы численного интегрирования
- •4.4.1. Метод трапеций
- •4.4.2. Метод Симпсона
- •4.4.3. Оценка точности формул численного интегрирования. Выбор шага интегриров-ания
- •4.4.3.1. Выбор шага интегрирования по оценке остаточного члена (ошибки)
- •4.4.3.2. Выбор шага интегрирования с помощью двойного пересчета
- •4.5.1. Теоретические сведения
- •4.5.2. Одноступенчатые методы
- •4.5.2.1. Решение с помощью рядов Тейлора
- •4.5.2.2 Метод Эйлера
- •4.5.2.3. Модифицированный метод Эйлера
- •4.5.2.4. Метод Эйлера-Коши
- •4.5.2.5 Метод Рунге-Кутта
- •4.5.3. Многоступенчатые методы
- •4.5.3.1. Методы прогноза и коррекции
- •4.6. Методы решения линейной краевой задачи для обыкновенных дифференциальных уравнений
- •4.6.1. Постановка задачи
- •4.6.2. Метод конечных разностей
- •4.6.3. Метод прогонки
- •4.6.4. Алгоритм решения краевой задачи методом прогонки.
1.3. Управляющие конструкции
Эти конструкции управляют ходом выполнения программы. В их отсутствие она выполняется последовательно. Но такое допустимо лишь в самых простейших программах. Поэтому любой язык программирования позволяет изменять порядок выполнения операторов за счет ветвления и циклов.
1.3.1. Операторы ветвления
В программах на Visual Basic можно проверять условия и выполнять действия в зависимости от результатов проверки. Предназначенные для этого операторы Visual Basic перечислены в таблице:
Чтобы проверить: |
Используйте: |
Одно условие и выполнить оператор или блок операторов |
If...Then |
Одно условие и выбрать один из двух блоков операторов |
lf...Then...Else |
Более одного условия и выполнить один из нескольких блоков операторов |
If... Then. ..Elself |
Одно условие и выполнить один из нескольких блоков операторов |
Select Case |
1.3.1.1. lf...Then
Позволяет выполнять один или несколько операторов, если условие истинно. Можно использовать однострочный или блочный синтаксис. Следующий пример иллюстрирует обе формы:
If thisVal < 0 Then thisVal = 0
If thisVal > 5 Then thatVal = thisVal + 25 thisVal = 0 End If
В однострочной форме оператор End If не применяется. А если Вы хотите выполнить более одной строки кода, когда опенка условного выражения дает True, Вам нужен блочный вариант — lf...Then...End If.
1.3.1.2. If...Then...Else
Позволяет определить 2 блока операторов. Первый блок выполняется, когда условие истинно, а второй — когда оно ложно.
If age < 16 Then MsgBox "You are not old enough for a license. " Else MsgBox "You can be tested for a license. " End If
1.3.1.3. lf...Then...Elself
Для проверки дополнительных условий не обязательно вкладывать операторы If...Then друг в друга — можно добавить операторы ElseIf, и тогда Ваш код станет легче читаемым и лаконичным. Допустим, Вам нужно рассчитать премии сотрудникам с учетом их вклада в общее дело. Процедура типа Function из следующего примера использует для этого серию операторов ElseIf:
Function Bonus(jobClass, salary, rating) If jobClass = 1 Then Bonus = salary * 0.1 * rating / 10 ElseIf jobClass = 2 Then Bonus = salary * 0.09 * rating / 10 ElseIf jobClass = 3 Then Bonus = salary * 0.07 * rating / 10 Else Bonus = 0 End If End Function
Оператор If...Then...ElseIf очень гибок. Вы можете начать с простого оператора If...Then, а потом добавлять операторы Else и ElseIf по мере необходимости. Но если все операторы ElseIf сравнивают одно и то же выражение с разными значениями, лучше воспользоваться оператором Select Case.
1.3.1.4. Select Case
Оператор Select Case заменяет серию операторов ElseIf в том случае, когда одно выражение сравнивается с несколькими значениями. Он обеспечивает ветвление по условию, аналогичное возможностям оператора If...Then...ElseIf; но делает код эффективнее и читабельнее.
Например, чтобы добавить еще несколько уровней в предыдущий фрагмент, нужно было бы ввести дополнительные операторы ElseIf, однако мы перепишем функцию на основе оператора Select Case:
Function Bonus(jobClass, salary, rating) Select Case jobClass Case 1 Bonus = salary * 0.1 * rating / 10 Case 2 Bonus = salary * 0.09 * rating / 10 Case 3 Bonus = salary * 0.07 * rating / 10 Case 4, 5 ' можно включать несколько значений... Bonus = salary * 0.05 * rating / 5 Case 6 To 8 ' ...или задавать диапазон Bonus = 150 Case Is > 8 ' ...или сравнивать с другими значениями Bonus = 100 Case Else Bonus = 0 End Select End Function
Заметьте, что в конструкции Select Case вычисляется только одно выражение — в самом ее начале. Оператор If...Then...ElseIf, напротив, позволяет проверять разные выражения в каждом ElseIf. Поэтому оператор If...Then...ElseIf можно заменить оператором Select Case, только если все ElseIf вычисляют одно выражение.