Печатать книгуПечатать книгу

Лабораторная работа. Основы работы в VBA. Линейное программирование

Рассмотрены основы работы в редакторе Visual Basic for Application (VBA) для Excel, общие вопросы программирования (переменные константы, типы данных и их задание, запись арифметических выражений). Так же на примерах показываются основные приемы программирования.


Сайт: Электронный университет КГЭУ - виртуальная образовательная среда
Курс: Информационные и компьютерные технологии (Бикеева Н.Г.)
Книга: Лабораторная работа. Основы работы в VBA. Линейное программирование
Напечатано:: Гость
Дата: Tuesday, 23 July 2024, 08:39

1. Язык VBA и его возможности

Цель работы

Данная лабораторная работа предназначена для изучения среды Visual BASIC for application (VBA), приобретения практических навыков разработки простейших линейных программ, овладения практическими навыками разработки и программирования линейных алгоритмов, приобретения навыков по отладке программ.


VBA (Visual Basic for Application) – это язык программирования, поддерживаемый всеми приложениями пакета Microsoft Office, в состав которого входят такие популярные приложения, как Microsoft Access, Microsoft Excel, Microsoft PowerPoint, Microsoft Word и др.

VBA – относительно несложный язык программирования, который очень прост и удобен в освоении и позволяет быстро получить ощутимые результаты – конструировать профессиональные приложения для решения практически любых задач в среде Microsoft Windows. Можно сказать, что язык VBA является прямым наследником языка программирования Basic, но, тем не менее, в сравнении с ним он шагнул далеко вперед. Поэтому и возможностей, как внутренних (например, в части вывода на экран всевозможных форм), так и в отношении взаимодействия с другими приложениями, у него гораздо больше. Изучив язык Visual Basic for Application, станет понятно, что создавать многие офисные приложения с его помощью гораздо проще и быстрее, чем с помощью других языков программирования.

Следует заметить, что, будучи развитым языком программирования, VBA также включает в себя полноценную интегрированную среду разработки с полным набором специализированных окон, упрощающих проектирование, отладку и тестирование программ. Интегрированная среда разработки VBA представлена приложением, называемым редактором Visual Basic. Этот редактор имеет типичное для приложений Windows окно с панелью меню и целым набором панелей инструментов, которые позволяют получить доступ к целому ряду окон, предоставляющих инструментальные средства, необходимые для создания программ. Кроме того, редактор VBA включает специализированные средства для быстрого создания пользовательского интерфейса, что превращает его в визуальную среду разработки приложений.


1.1. Редактор VBA

Редактор VBA представляет собой инструментальные средства, предназначенные для создания модулей программ, просмотра существующих модулей, создания и редактирования исходного кода программного модуля, создания пользовательских диалоговых окон и выполнения других задач, относящихся к написанию и обслуживанию программ на VBA. Редактор представляет собой отдельное приложение, которое можно запустить из любого приложения Microsoft Office.

Чтобы открыть редактор Visual Basic for Application из среды Excel, нужно либо нажать комбинацию клавиш {Alt}+{F11}, либо выбрать команду Сервис ® Макрос ® Редактор Visual Basic. После выполнения этих операций на экране появится окно редактора модулей, в котором и происходит вся дальнейшая работа по созданию проекта (рис. 1).

 

Рис. 1. Окно редактора Visual Basic в Microsoft Excel

 

Редактор VBA состоит из следующих окон:

Окно проекта (Project Explorer) содержит дерево-диаграмму открытых в данный момент файлов (документы, шаблоны или рабочие книги) и объектов, содержащихся в этих файлах (объекты host-приложения, модули, ссылки, формы и так далее). Project Explorer можно использовать для перехода к различным модулям и другим объектам в проекте VB при помощи кнопок (панели инструментов этого окна) View Code (Программа), View Object (Объект) и Toggle Folders (Папки). Для удобства они сгруппированы по нескольким категориям. VBAProject, Лист1, Лист2 и др.

Окно свойств (Properties Window) содержит все свойства объекта текущего выбора. Вкладка Alphabetic (По алфавиту) этого окна предоставляет список свойств выделенного объекта, составленный из имен свойств в алфавитном порядке. Вкладка Categorized (по категориям) отображает свойства объекта, отсортированные по категориям. Каждый элемент управления, вставленный в форму, имеет набор свойств, с помощью которых можно определить его внешний вид. Все эти свойства собраны в отдельном окне. Окно состоит из двух столбцов. В первом столбце выводятся названия свойств, во втором – их значения. При редактировании формы, модулей и модулей классов часто приходится прибегать к этому окну, меняя свойства элементов управления, такие, как надпись, цвет, размеры и некоторые другие. Для того чтобы изменить значение свойства, следует установить курсор в соответствующую строку и набрать новое значение. Впрочем, значения некоторых свойств можно выбирать из списка или настраивать с помощью диалогового окна.

Окно для редактирования программ (Code Window) – это окно, в котором просматривается, редактируется или создается исходный код VBA. В режиме Full Module View весь исходный код макроса в модуле отображается сразу в прокручивающемся текстовом окне, а макрос отделяется от другого макроса серой линией. Редактор VB позволяет также просматривать содержимое модуля в режиме Procedure View (представление процедуры). Чтобы выбрать режим просмотра, надо щелкнуть по кнопке в нижнем левом углу Code Window. Окно проекта может быть скрыто, и для его открытия нужно щелкнуть по кнопке View Code , расположенной в Окне проекта.

 

1.2. Панели инструментов редактора VBA

Для многих пользователей выбрать командную кнопку с помощью мыши легче, чем выбрать команду в меню. Поэтому Редактор VBA предоставляет важнейшие и наиболее часто используемые команды в виде кнопок на панели инструментов. По умолчанию Редактор VBA отображает только панель инструментов Standard, показанную на рис. 2. В конце панели, справа, находится кнопка  More Buttons . Если необходимо удалить с панели или добавить некоторые кнопки на панель Standard, надо нажать на эту кнопку, а затем указать соответствующую кнопку в появляющемся меню.

 

Рис. 2. Панель инструментов Standard

 Кроме панели Standard Редактор VBA предлагает еще три панели: Edit (правка), Debug (отладка) и UseForm. Панель Edit Редактора VBA содержит несколько командных кнопок, полезных при редактировании текста в Code Window (окне редактирования программ).

Для управления отображением панелей инструментов используется команда View ® Toolbars (вид ® панели инструментов). Так какредактор VBA по умолчанию не отображает панель Edit, ее нужно выводить на экран вручную.

Панель инструментов Standard содержит 19 кнопок. Каждая кнопка является быстрой командой меню.

Таблица 1. Кнопки панели инструментов Standard

Кнопка

Действие

1

2

View Microsoft Excel


Переключает на host-приложение VBA, из которого был запущен Редактор VBA. Значок этой кнопки изменяется в зависимости от конкретного приложения, из которого запускался редактор VBA

Insert UserForm


При щелчке на кнопке со стрелкой  отображается список объектов, которые можете вставить в текущий проект: UserForm, Module, Class Module или Procedure. Это можно выполнить и при использовании одноименных команд меню Insert (вставка)

Save 

Сохраняет текущий проект (команда File ® Save)

Cut 

Вырезает выделенный текст или объект и помещает его в буфер обмена; (как команда Edit ® Cut)

Сору 

Копирует выделенный текст или объект в буфер обмена;(команда Edit ® Сору)

 

Paste 

Вставляет текст или объект из буфера обмена в Code Window (окно редактирования программ) или форму пользователя в позицию курсора (команда Edit ® Paste)

Find 

Открывает диалоговое окно Find для нахождения определенного слова или фразы в модуле; (команда Edit ® Find)

Can't Undo 

Отменяет самую последнюю команду, если это возможно (не все действия могут быть отменены); (команда Edit ® Undo)

Can't Redo  

Возобновляет самую последнюю отмененную команду; так же, (команда Edit ® Redo)

Run Macro 

Запускает текущую процедуру или форму (команда Run ® Sub/UserForm)

Break 

Прерывает выполнение программы VBA (команда Run ® Break)

Reset 

Перезапускает программу VBA (команда Run ® Reset)

Design Mode 

При нажатии этой кнопки Редактор VBA переходит в режим Design (конструктора) (командой Run ® Design Mode)

Project Explorer 

Отображает Окно проекта (команда View ® Project Explorer)

Properties Window


Отображает Окно свойств (команда View ® Properties Window)

Object Browser 

Отображает диалоговое окно Просмотр объектов (команда View ® Object Browser)

Toolbox 

Отображает Панель элементов (команда View ® Toolbox)

Справка: Microsoft Visual Basic 

Отображает окно Справочной системы Microsoft Office для контекстно-зависимой подсказки по текущей задаче

Cursor position


Отображает положение курсора. Эта область панели инструментов Standard, фактически, не является командной кнопкой и появляется только тогда, когда курсор находится в Code Window. Эта область показывает, в какой строке модуля и в каком столбце строки находится курсор вставки

More Buttons

Позволяет добавлять или удалять кнопки панели


2. Типы данных Visual Basic, переменные и константы

Переменная – это величина, значение которой может изменяться. В программах переменные используются для идентификации определенных численных и текстовых значений. Каждая переменная в программе имеет не только название, но и тип. Тип – это параметр переменной, который определяет диапазон хранимого в ней значения, методы его обработки и объем выделяемой памяти.

Таблица 2. Типы данных VBA.

Название типа

(символ

определения)

Размер

в байтах

одной

переменной

Описание и диапазон значения

1

2

3

Byte

1

Используется для хранения положительного числа от 0 до 255

Boolean

2

Используется для хранения логических значений – имеет только значения True или False

Currency (@)

8

Используется для хранения чисел от

–922337203685477,5808 до

+922337203685477,5807

Это число с фиксированной точкой – десятичная точка находится в одном и том же месте –справа от десятичной точки всегда находится четыре цифры. Математические операции над такими числами не имеют ошибок округления или они малы. Поэтому операции над такими числами более точны

Date

8

Используется для хранения комбинации информации о дате и времени. Диапазон дат может быть от 1 января 100 года до 31 декабря 9999 года Диапазон времени от 00:00:00 до 23:59:59

Decimal

12

Переменные этого типа сохраняются как 96-битовые знаковые целые, масштабируемые значением некоторой степени числа 10. Степень определяет число десятичных знаков справа от десятичной точки и может быть в диапазоне 0 ¸ 28.

Double (#)

8

Используется для хранения дробных чисел (16 десятичных знаков после запятой)

Отрицательные числа: от

–179.769313486232D+308 до

–4. 94065645841247D–324.

Положительные числа: от

4.94065645841247D–324

до

1.797693 13486232D+308

Integer (%)

2

Используется для хранения целого числа

от –32768 до +32767

Long (&)

4

Используется для хранения целого числа

от -2147483648 до 2147483647

Object

4

Используется для доступа к любому объекту, распознаваемому VBA. Сохраняет адрес объекта в памяти

Single (!)

4

Используется для хранения дробного числа (8 десятичных знаков после запятой)

Отрицательные числа:

от –3.402823Е38 до –1.401298Е45

Положительные числа:

от 1.401298Е-45до3.402823Е38

String ($)

(переменной длины)

10 байт + длина строки

Используется для хранения текста. Может содержать от 0 символов до (приблизительно) 2 миллиардов символов

String

(фиксированной длины)

Длина строки (1 байт на символ)

Используется для хранения текста. Может содержать от одного до (приблизительно) 654000 символов

Variant

16 байт + 1 байт/символ

Тип Variant может хранить любой другой тип данных. Диапазон для данных типа Variant зависит от фактически сохраняемых данных. Этот тип данных является типом данных По-умолчанию. Если в программе отсутствует описание какой либо переменной, то VBA приписывает ей тип Variant.

При выборе имени переменной необходимо соблюдать следующие правила:

– имя переменной должно начинаться с буквы алфавита (допускается только латиница);

– после первой буквы имени переменной может стоять любая комбинация цифр, букв или символов подчеркивания (_);

– имена переменных не могут содержать пробелы, точку (.) или любой другой символ, который используется для обозначения математических операций и операций сравнения (=, +, - , /и так далее);

– имена переменных не могут превышать 255 символов;

– имя переменной не может дублировать определенные ключевые слова;

– имя переменной должно быть уникальным в рамках его области действия, то есть имя переменной должно быть уникальным в пределах процедуры или модуля, в котором она объявляется.

Имена переменных не «чувствительны» к состоянию регистра, то есть написание имени переменной прописными или заглавными буквами не имеет значения. Имена FirstMyVar и firstmyvar представляют для VBA одно и то же. При выборе имен переменных надо делать их по возможности наиболее информативными: выбирать имена, подобно AllSum, а не х или у.

Константа – это значение в программе VBA, которое не меняется.

В коде VBA можно также писать литеральные численные константы и даты. Примеры численных литеральных констант включают числа 36, 3, 14 и 212. Константы можно изменять только редактированием исходного кода VBA.

Константы не должны быть обязательно литеральными. VBA позволяет создавать именованные константы. Именованная константа имеет заданное ей имя; это имя представляет конкретное неизменяемое значение.

Использование именованных констант повышает читабельность процедур, например, процедура, выполняющая геометрические вычисления, легче читается и более понятна, если использовать именованную константу Pi вместо литеральной константы 3,14.


2.1. Задание типа данных переменной

Хотя объявлять тип переменным не обязательно ( VBA автоматически им присваивает тип Variant), объявление типа переменных имеет несколько преимуществ:

– объявленные переменные ускоряют выполнение кода программ. Так как при объявлении указывается VBA тип переменной, выполнение программы ускоряется на то время, которое VBA потратил бы на анализ переменной типа Variant, чтобы определить ее конкретный тип.

– объявленные переменные повышают эффективность кода. Переменные типа Variant могут занимать гораздо больше памяти, чем переменные определенных типов. Объявленная переменная занимает только память, необходимую для этого определенного типа, поэтому это может значительно сократить объем памяти, требуемый для программы;

– программный код с типизированными переменными легче читать и понимать.

Объявить тип переменной можно явно и неявно.                                   

Для явного объявления переменной и ее типа используется оператор Dim, который в общем случае имеет следующий формат:

 Dim name_l As type_l, name_2 As type_2, ...

Примеры правильного синтаксиса для объявлений типа переменных:

Dim Price As Currency

Dim DataPlata As Date

Dim Message As String

Dim Counter As Integer

Dim Profit As Single, Gross As Currency, Message As String

При неявном объявлении тип переменной задается добавлением символа определения типа в конец имени переменной (см. табл. 2), например:

MyVar% = 25

CelsiusTemp! = 15,35

Title$ = "Excel"

Хотя неявное объявление переменных удобно, с ним связаны некоторые проблемы. Когда переменные объявляются неявно, существует риск нечаянно создать новую переменную, когда на самом деле, необходимо использовать уже существующую переменную, или использовать существующую переменную, когда надо создать новую. Обе эти ситуации приводят к ошибкам в коде, которые очень трудно отслеживать.

Чтобы было легче в любое время обнаружить ошибки, связанные с неявным объявлением переменных, VBA предоставляют команду Option Explicit. При использовании команды Option Explicit VBA требует объявления всех переменных перед (с помощью оператора Dim) перед их использованием.

Независимо от того, объявляются ли переменные типа String с помощью тора Dim или добавлением символа определения типа $, создаваемые строковые переменные по умолчанию являются строками переменной длины. Строковые переменные переменной длины изменяют длину, в зависимости от длины строки, сохраняемой переменной. Иногда может понадобиться использовать строку фиксированной длины. Строки фиксированной длины всегда имеют одну и ту же длину. Они полезны, если необходимо обеспечить, чтобы текст, сохраняемый в строковой переменной, всегда содержал одно и то же число символов.

Общий синтаксис для создания строки фиксированной длины:

Dim name As String * N

N – число, определяющее длину строки.

После объявления переменной, независимо от того, объявляется ли эта переменная явно или неявно, и как задается тип, эта переменная сохраняет тот же самый тип столько времени, сколько она существует. Нельзя переобъявить переменную или переопределить ее тип.


3. Математические функции

Для наиболее часто встречающихся функций в алгоритмический язык включаются программы для их вычисления.В таблице 3 приведены математические функции, имеющиеся в VBA. В этой таблице N означает любое численное выражение; все аргументы функций являются обязательными, если только не указано иначе.

 Таблица 3. Математические функции VBA

Функции (аргументы)

Возвращает/ действие

Abs(N)

Возвращает абсолютное значение N

Atn(N)

Возвращает арктангенс N как угол в радианах

Сos(N)

Косинус угла N, где N это угол, измеряемый в радианах

Sin(N)

Возвращает синус угла; N – это угол, измеряемый в радианах

Sqr(N)

Возвращает корень квадратный из N. VBA отображает ошибку, исполнения, если N – отрицательное

Tan(N)

Возвращает тангенс угла; N – угол в радианах

Exp(N)

Возвращает константу е, возведенную в степень N. (е – это основание натурального логарифма)

Fix(N)

Возвращает целую часть N. Fix не округляет число, а отбрасывает любую дробную часть. Если N является отрицательным, Fix возвращает ближайшее отрицательное целое, большее, чем или равное N

Int(N)

Возвращает целую часть N. Int не округляет число, а отбрасывает любую дробную часть. Если N является отрицательным, Int возвращает ближайшее отрицательное целое меньшее, чем или равное N

Log(N)

Возвращает натуральный логарифм N

Rnd(N)

Возвращает случайное число; аргумент является необязательным. Функцию Rnd  используется только после инициализации VBA-генератора случайных чисел оператором Randomize

Sgn(N)

Возвращает знак числа:

-1, если N отрицательное;

1, если N – положительное;

0, если N равно 0

Дополнительные тригонометрические функции можно выводить из базовых математических функций VBA. Например, если необходимо вычислить котангенс угла, для его нахождения можно использовать формулу 1/Таn(х).


3.1. Порядок вычисления выражений. Запись математических выражений

Выражения состоят из одной и долее следующих частей

         – константы;

         – переменные;

         – знаки операций;

         – элементы массива;

         – функции.

         Выражения используются для выполнения вычислений и сравнения значений, для предоставления переменных в качестве аргументов различным функциям и процедурам VBA. Все выражения Visual Basic вычисляются до значения, имеющего один из типов данных Visual Basic.

При вычислении сложных выражений VBA следует таким правилам:

– Части выражения, заключенные в круглые скобки, всегда вычисляются в первую очередь. Если выражение, заключенное в круглые скобки, является другим сложным выражением, VBA применяет эти же правила к выражению в круглых скобках;

– Конкретные операции выполняются в зависимости от иерархии операторов;

– Когда операторы имеют равный уровень приоритета, они вычисляются в порядке слева направо.

VBA вычисляет выражения в следующем порядке:

– Знаки арифметических операций.

– Знаки конкатенации (сложения) строк.

– Операторы сравнения.

– Логические операторы.

В таблице приведена иерархия операторов VBA. Операторы/операции перечислены в порядке от самого высокого приоритета до самого низкого. Операции, помещенные в одной и той же строке этой таблицы, имеют равный приоритет. Операции с равным приоритетом вычисляются слева направо так, как они появляются в выражении.

         Иерархия операция от наивысшего до самого низкого приоритета показана в таблице 4

 Таблица 4. Иерархия операторов/операций

 

Оператор/

операция

Комментарии

^

Возведение в степень, наивысший приоритет

-

Унарный минус (присвоение знака числу)

*, /

Умножение и деление имеют равные приоритеты; они вычисляются по мере появления в выражении слева направо

\

Вычисляет результат целочисленного деления первого математического выражения (X) на второе (Y). Перед вычислением значение каждого выражения округляется до целых по правилам математики.

Mod

Вычисляет остаток от деления первого математического выражения (X) на второе (Y). Перед делением значение каждого выражения округляется до целых по правилам математики

+, -

Сложение и вычитание имеют равный приоритет; они вычисляются по мере появления в выражении слева направо

&

Сложение строк выполняется после любых арифметических операций в выражении и перед любыми операциями сравнения или логическими операциями

<, <=, >, >=, =, <>

Все операторы сравнения имеют равные приоритеты и вычисляются по мере появления в выражении слева направо. Для группирования операторов сравнения в выражениях надо использовать круглые скобки

Not

Логическое отрицание

And

Функция И (логическое умножение)

Or

Функция ИЛИ (Логическое сложение)

Xor

Исключающее ИЛИ

Eqv

Функция эквивалентности

Imp

Функция импликации

Математические выражения в программе записываются в одну строку. В строке должно быть не более 255 символов без учета пробелов. Главную роль в записи математических выражений играет правильное использование скобок. Они не только указывают очередность действий, но и отделяют аргументы математических функций, поэтому скобок бывает больше, чем других служебных знаков. Арифметическое выражение состоит из переменных, констант, функций и знаков арифметических действий.

Проверять длинные записи на предмет количества скобок становится легче, если знать правило: в любом выражении количество левых скобок должно быть равно количеству правых. Если равенства нет, то программа выдает сообщение об ошибке. 


3.2. Примеры записи некоторых арифметических выражений

Функция

Арифметическое выражение

PI\( \pi \)

PI = 4*ATN(1)

\( y= \frac{A+B}{AX-2}+3,15 \cdot10 \)15

Y = (A+B)/(A*X-2)+3.15Е15

\( Y= \frac{A+B}{a \cdot b }-0,17 \cdot10 \)13

Y = (А+В)/(А*В)-.17Е-13

Y = Sin2X

Y = Sin(X)12

Y = Sin X2

Y = Sin(X*X)

\( Y= \sqrt[7]{lg x} \)

Y = (LOG(X)/LOG(10))^(1/7)

\( Y= \sqrt[3]{Sin x} \)

Y = SIN(X)^(1/3)

Y=e\( \sqrt{|cos x|} \)

Y = EXP(SQR(ABS(COS(X))))

Y = ctg2x

Y = 1/TAN(X)^2

Y = arcsin ex

Y = ATN(EXP(X)/SQR(1-EXP(2*X)))

Y = arccos3X

Y = ATN(SQR(1-9*X*X)/(3*X))

 \( Y= \sqrt[3]{|ln e^x|} \)

Y = (ABS(LOG(EXP(X)))^(1/3)

\( Y= \sqrt{1+ctg^3 x-lg x} \)

Y = SQR(1+1/TAN(X)^3-LOG(X)/LOG(10))

у = cos x2

Y = COS (x ^ 2)

у = cos2х

Y = COS (x) ^ 2

y = cos a+bx

Y = COS (x) ^ (a + b)

\( Y= \sqrt[5]{x} \) 

Y = x ^ (1 / 5)

\( Y= \sqrt[a+b]{x+3} \) 

У = (x + 3) ^ (1 / (5 + b))

\( Y= \sqrt{x_1+ \sqrt{x_2} } \)

Y = SQR(x1 + SQR(x2))

\( Y= \sqrt{x_1+ \sqrt[3]{x_2} } \)

Y = SQR(xl + x2 ^ (1 / 3))

\( Y=x^{y+2} \)

z = x ^ (y + 2)

\( z=a^{x^y} \)

z = a ^ (x ^ y)

 \( z= \frac{a+b+3}{ \frac{a+1}{b+2}} \)

y = (a +b + 3)/((a + l)/(b + 2))

4. Организация диалога между пользователем и программой. Ввод данных в программу и вывод результата

Получение данных от пользователя, сохранение их в переменной и отображение результатов действий, выполненных над ними, являются основными элементами, необходимыми для написания интерактивных процедур. Интерактивная процедура – это процедура, обменивающаяся информацией с пользователем, то есть процедура взаимодействует с пользователем, отображая сообщения и получая ввод. Получая информацию от пользователя, интерактивная процедура может вы выполнять одни и те же операции, используя различные данные.

Данные, вводимые пользователем, называются входными данными. Чтобы получить входные данные от пользователя процедуры, надо использовать функцию InputBox. Функция InputBox отображает диалоговое окно, содержащее текст, который запрашивает пользователя ввести некоторое значение, и текстовое окно для ввода этого значения. Диалоговое окно, отображаемое InputBox, содержит также командные кнопки ОК и Cancel.

Функция InputBox имеет следующий синтаксис:

 

stringvar = InputBox (Promt [, Title])

 

Здесь stringvar представляет любую переменную, которая может сохранять строку. Аргумент Prompt представляет любое строковое значение (литерал, константу или переменную); он является обязательным аргументом функции InputBox, отображает эту строку как запрос в диалоговом окне. Аргумент Title является необязательным вторым аргументом для InputBox. Title представляет любое строковое значение (литерал, константу или переменную). InputBox отображает текст этой строки в строке заголовка диалогового окна. Если опустить аргумент Title, VBA отображает в строке заголовка диалогового окна InputBox название открытого приложения (Microsoft Excel). Например строка:

 

Temp = InputBox("Введите радиус круга", "Площадь круга")

 

выводит следующий запрос:

 

 

Ввести данные можно также из рабочего листа Excel. Для этого используется функция Cells. Функция имеет следующий формат: 

имя переменной = Cells(a, b)

 a – номер строки;

b – номер столбца.

Например, команда

 xEnd = Cells(3, 2)

 присваивает переменной xEnd числовое значение, записанное в рабочем листе Excel в 3 строке, 2 столбце.

Вывод результата можно организовать командами MsgBox (вывод ответа в диалоговом окне) и Cells (вывод ответа в рабочий лист Excel) Оператор MsgBox является простейшей формой экранного вывода, которую можно включать в процедуры VBA. Оператор MsgBox в простейшем случае имеет следующую форму записи:

 MsgBox "Promt", [Buttons As VbMsgBoxStyle = vbOKOnly], [Title]

 Первый аргумент Promt является текстом, который должен быть отображен в выводимом диалоговом окне посредством MsgBox. Второй аргумент оператора MsgBox Buttons As VbMsgBoxStyle = vbOKOnly является необязательным. Он определяет, сколько и какого типа командные кнопки появляются в диалоговом окне, отображаемом посредством MsgBox. Когда необязательный второй аргумент опущен, диалоговое окно содержит только одну кнопку – OK. Если второй аргумент опускается, то после первого аргумента ставится две запятые. Третий аргумент Title в операторе MsgBox определяет заголовок диалогового окна (отображается белыми буквами на синем фоне). Подобно первому аргументу текст, для строки заголовка диалогового окна заключается в кавычки. Пример: 

MsgBox "Сумма ряда равна  " & z, , "Решение задачи"

          После выполнения этой команды на экране возникает диалоговое окно, сообщающее результат – вместо переменной z выводится ее численное знакчение.


Для вывода результата в рабочий лист Excel используется команда:

 

Cells(i, j) = имя переменной

 

где i, j – номер строки и столбца ячейки соответственно, куда выводится численное значение переменной. Номер строки и столбца может присутствовать в команде как в виде переменных (их числовое значение должно быть целым и определено заранее), так и в виде конкретных целых чисел. Например, команда

 

Cells(2, 4) = x

 

выводит численное значение переменной x в ячейку рабочего листа, находящейся во второй строке, 4 столбце.


5. Линейные алгоритмы

Линейные алгоритмы используют для решения относительно простых задач, не требующих разветвляющихся или циклических вычислений. Такими задачами являются расчеты математических формул, ввод и вывод информации, некоторые действия с файлами. Линейные алгоритмы объединяет то, что вычисления в них проходят последовательно, шаг за шагом, oт начала к концу (сверху вниз по блок-схеме).

Простейшая программа решения математического примера имеет три основных действия: задание типа переменных, ввод данных, расчет выражения, вывод результата.

Пример 1. Вычислить значение функции при х = 45°.

 \( y= \frac{2 cos(x- \frac{x}{6} )+x}{ \frac{1}{2} +sin^2 x= \sqrt{x} } \).

Sub primer_1()

Dim x As Integer

Dim y As Single

Dim pi As Double, x_rad As Double

'определяем численное значение х

x = 45

'определяем численное значение числа Пи

pi = 4 * Atn(1)

' переводим х в радианы, так как в тригонометрических функциях

' аргумент должен быть в радианах

x_rad = x * pi / 180

' производим расчет заданного математического выражения

y = (2 * Cos(x_rad - x_rad / 6) + x) / (1 / 2 + Sin(x_rad) ^ 2 + Sqr(x))

'выводим ответ в диалоговое окно

MsgBox "y=" & y

End Sub


5.1. Примеры решения задач с использованием длинейного алгоритма

Пример 2. Вычислить значение формулы при различных значениях переменной х. Значения переменной х вводить в градусах.

 \( y= \frac{cos x + \sqrt[3]{ \frac{x}{2} +2}}{(3-tg x)^2} +|2-5x|^x \)

Sub primer_2()

'определяем тип переменных

Dim x As Single, x_rad As Single, pi As Single

Dim y As Double

'вводим значение х по запросу программы

x = InputBox("Введите значение х в градусах", "Запрос задачи")

'вычисляем значение числа Пи

pi = 4 * Atn(1)

' переводим х в радианы, так как в тригонометрических функциях

' аргумент должен быть в радианах

x_rad = x * pi / 180

'производим расчет заданного математического выражения

y = (Cos(x_rad) + (x / 2 + 2) ^ (1 / 3)) / (3 - Tan(x_rad)) ^ 2 + Abs(2 - 5 * x) ^ x

'выводим ответ в виде диалогового окна

MsgBox "Значение функции при х=" & x & " градусов равно" & y, , "Решение задачи"

End Sub

 

Результат работы программы:



Пример 3. Составить блок-схему и про­грамму расчета площади треугольника по формуле Герона, а, b, с – длины сторон.

Решение. Формула Герона имеет вид:

 \( s= \sqrt{p(p-a)(p-b)(p-c)} \) 

где \( p= \frac{a+b+c}{2} \) – полупериметр.

Sub primer_3()

'определяем тип переменных

Dim a As Single, b As Single, c As Single, p As Single, s As Single

'вводим значение длин сторон треугольника по запросу программы

a = InputBox("Введите длину a сторны треугольника", "Запрос 1 задачи")

b = InputBox("Введите длину b сторны треугольника", "Запрос 2 задачи")

c = InputBox("Введите длину c сторны треугольника", "Запрос 3 задачи")

'вычисляем значение полупериметра

p = (a + b + c) / 2

'вычисляем площадь треугольника по формуле Герона

p = Sqr(p * (p - a) * (p - b) * (p - c))

'выводим ответ в виде диалогового окна

MsgBox "При длинах сторон " & a & ", " & b & " и " & c & " площадь треугольника равна " & p, , "Решение задачи"

End Sub

 

Результат работы программы:




  

Пример 4. Составьте программу решения системы линейных уравнений

 a1 x+b1 x=c1

a2x+b2 x=c2

по правилу Крамера

 \( x= \frac{c_1 b_2 - c_2 b_1}{a_1b_2 - a_2b_1} \) ;  \( x= \frac{a_1 c_2 - a_2 c_1}{a_1b_2 - a_2b_1} \)

Sub primer_4()

'определяем тип переменных

Dim a1 As Single, a2 As Single, b1 As Single, b2 As Single

Dim c1 As Single, c2 As Single, x As Single, y As Single

'вводим значения коэффициентов уравнения из рабочего листа Excel

a1 = Cells(2, 2)

b1 = Cells(3, 2)

c1 = Cells(4, 2)

a2 = Cells(5, 2)

b2 = Cells(6, 2)

c2 = Cells(7, 2)

'вычисляем значения корней уравнения по правилу Крамера

x = (c1 * b2 - c2 * b1) / (a1 * b2 - a2 * b1)

y = (a1 * c2 - a2 * c1) / (a1 * b2 - a2 * b1)

'выводим вычисленные значения корней в рабочий лист Excel

Cells(9, 2) = x

Cells(10, 2) = y

End Sub

 

Ответ:


 


6. Задания на выполнение лабораторной работы

1. Составьте программы для вычисления арифметических выражений F(X), приведенных в табл. 6. Ответ вычислять для типов INTEGER, SINGLE, DOUBLE.

Для проверки правильности программ используйте ответы, приведенные в четвертом столбце. Результаты вычислений приведены с округлением до целого, с обычной точностью и с двойной точность для Х указанных во втором столбце и при А = 1, B = 2, C = 3, D = 4.

 

Таблица 6

F(X)

X =

Ответ

1

Ax+Bx2 +Cx3

1.11

1.11

1.11

8

7.67709

7,677093000000002

2

\( A+ \frac{Bx}{C} +Dx^2 \)

2.5

2.5

2.5

28

27.66667

27.66666603088379

3

\( Ax^2 +C \sqrt{x} \)

45.33

45.33

45.33

2075

2075.007

2075.00732421875

4

\( \sqrt{B+A \sqrt{(1+x^2)^3} } \)

2

2

2

4

3.6304744

3.630473782786339

5

\( \sqrt{ \sqrt{Ax} +B \sqrt{1+x^2} } \)

3.4

3.4

3.4

3

2.988633

2.988632917404175

6

\( Ae^{Bx^2}+Ce^ \sqrt{Dx-1} \)

2

2

2

3023

3023.24

3023.239990234375

7

A sin x + B cos x

1

1

1

2

1.922076

1.922075629234314

8

\( A \sqrt{sin^3 x} +B cos x \)

0.5

.5

.5

2

2.087122

2.087121963500977

9

\( \frac{A cos \sqrt{x} }{1+B sin^2 x+D sin x^2} \)

5

5

5

 0

-0.2672565

-0.267256498336792

10

\( \frac{A sh x}{B+shx^2} \)

.9

.9

.9

0

.3537852

.3537852466106415

11

A+B lg x2 +C lg2 x

3

3

3

4

3.591419

3.591418981552124

12

\( \frac{A+2B| \sqrt{|ln|sin^2 x^3||}| }{C} +D \)

2

2

2

5

4.528372

4.528372287750244




14

\( \frac{A+2B| \sqrt{|ln|cos^2 x^3||}| }{C} +D \)

2

2

2

7

6.951274

6.951273918151855

15

\( \frac{A+2B| \sqrt{|ln|ln^2 x^3||}| }{C} +D \)

2

2

2

6

5.946721

5.946721076965332

16

\( \frac{A+2B| \sqrt{|ln|tg^2 x^3||}| }{C} +D \)

2

2

2

7

6.943999

6.94399881362915

 

 

2. Вычислить путь, пройденный телом при равноускоренном движении, по формуле

\( s=v_0 t+ \frac{a t^2}{2} \)

v0 =12,25 м/с, ф=5,1 м/с2 . t=0÷20 c, Δt=2 c

3. Вычислить общее сопротивление трех резисторов, соединенных последовательно и параллельно.

4. Дана длина ребра куба. Найти объем куба и площадь его боковой поверхности.

5. Даны два действительных положительных числа. Найти среднее арифметическое и среднее геометрическое этих чисел.

6. Даны катеты прямоугольного треугольника. Найти его гипотенузу площадь.

7. Дана сторона равностороннего треугольника. Найти площадь этого треугольника.

8. Даны гипотенуза и катет прямоугольного треугольника. Найти второй катет и радиус вписанной окружности.

9. Известна длина окружности. Найти площадь круга, ограниченного этой окружностью.

10. Найти площадь кольца, внутренний радиус которого равен 20, а внешний – заданному числу r (r > 20 ).

11. Треугольник задан величинами своих углов и радиусом описанной окружности. Найти стороны треугольника (по теореме синусов).

12. Найти площадь равнобочной трапеции с основанием  а  и  в и  углом a при большем основании а.

13. Вычислить расстояние d между двумя точками с координатами x1, y1 и х2, y2 (\( d= \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2} \)).

14. Определить периметр правильного  n – угольника, описанного около окружности радиуса r.

15. Смешано v1, литров воды температуры t1 с v2 литрами воды температуры t2. Найти объем и температуру образовавшейся смеси.

16. Определить время падения камня на поверхность земли с высоты h.

17. Вычислить период колебания маятника длины l.

18. Определить силу притяжения F между телами массы m1 и m2 находящимися на расстоянии r друг от друга.

19. Определить время, через которое встретятся два тела, равноускоренно движущиеся навстречу друг другу, если известны их начальные скорости, ускорения и начальное расстояние между ними.

20. Найти сумму членов арифметической прогрессии

а,      а+ d,          а + (n – 1) d

по данным значениям а,d, n.

         21. Перевести из линейной записи в обычную следующие выражения:

а) а/b/с;

б) а*b/с;

в) a/b*c;

г) a + b/c;

д) (a + b)/c;

е) a + b/b + с;

ж) (a + b)/(b + с);

з) a/sin(b);

и) 1/2 * b * sin(x);

к) 2 * b * с * cos(a/2)/(b + с);

л) 4 * R * sin(a/2) * sin(b/2) * sin(c/2);

м) (a * x + b)/(c * x + d);

н) 2 × sin((a + b)/2) * cos((a - b)/2);

o) abs(2 * sin(-3 * abs(x/2))).

22. Даны длины сторон прямоугольника. Найти его периметр и длину диагонали.

23. Даны два числа. Найти их сумму, разность, произведение, а также частное от деления первого числа на второе.

24 Даны длины сторон прямоугольного параллелепипеда. Найти его объем и площадь боковой поверхности.

25. Известны координаты двух точек на плоскости. Составить программу вычисления расстояния между ними.

 

7. Контрольные вопросы


         1. Как запустить редактор VBA?

         2. Из каких окон состоит редактор VBA? Охарактеризуйте каждое из окон.

         3. Охарактеризуйте каждую кнопку панели инструментов Standard.

         4. Что такое переменная? Что такое тип переменной?

         5. Перечислите типы данных VBA. Кратко охарактеризуйте каждый из этих типов.

         6. В чем заключается особенность типа Currency?

         7. Какой тип данных в VBA называется типом данных по умолчанию?

         8. Как можно задать тип переменной?

         9. В чем заключается недостаток неявного определения типа данных?

         10. Какие правила необходимо учитывать при выборе имени переменной?

         11. Что такое константа? Какие типы констант бывают? Чем они отличаются друг от друга?

         12. Зачем надо объявлять тип переменной, если существует тип по-умолчанию?

13. В чем отличие константы и переменной?

14. Перечислите встроенные математические функции. Перечислите границы использования каждой из них.

15. В каком порядке вычисляются выражения?

16. Перечислите порядок выполнения математических операций.

17. Как можно изменить порядок выполнения арифметических  действий при вычислении арифметического выражения?

18. Как записываются математические выражения на языке VBA?

19. Что такое интерактивная процедура?

20. Поясните, как с помощью функции Cells можно ввести данные из рабочего листа Excel и переслать данные в рабочий лист.

21. С помощью каких функций можно организовать интерактивный характер работы программы?

22. Как работает функция InputBox. Каков ее синтаксис?

23. Как работает оператор MsgBox. Каков его синтаксис?

24. Из каких частей состоит простейшая линейная программа?