Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Ссылки на внешние библиотеки

Поиск

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

Sub Макрос3()

SolverOk SetCell:="$D$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$C$2:$C$7"

SolverSolve

End Sub

Здесь функционал формируется в ячейке D8, а варьируемые параметры - в блоке C2:C7.

Попытаемся повторить макрос: Сервис/Макрос/Макрос3/Выполнить.

Рис. 4.2. Ошибка компиляции

Мы потерпели фиаско. На экране появляется панель (рис. 4.2), информирующая нас о том, что не определена процедура или функция SolverOk. Как же так? Мы только что пользовались этой процедурой, а она не определена? Все дело в том, что в Visual Basic не подключена ссылка на библиотеку, где находится набор процедур Solver. Для ее подключения необходимо установить соответствующий флажок ссылок (рис. 4.3). Теперь макрос можно повторять многократно.

Рис. 4.3 Ссылка на Solver

Следует отметить, что если бы мы попытались активизировать библиотеку Solver до первого выполнения процедуры "Поиск решения", мы не смогли бы найти ее на панели ссылок. Отсюда тестовый прогон процедуры является неплохим подспорьем поиска библиотеки.

 

 

Примеры

Скалярное произведение векторов (столбцы Excel) разной размерности

Программный модуль Примечания
Function Scalar(A, B) As Single А,В имеют тип Variant.
Dim n1 As Single, n2 As Single, n As Single Описываются все переменные.
n1 = A.Rows.Count Число строк в объекте А.
n2 = B.Rows.Count Число строк в объекте В.
n = Application.Min(n1, n2) Используется функция Excel.
Scalar = 0  
For i = 1 To n  
Scalar = Scalar + A(i) * B(i) Объекты А и В рассматриваются как массивы.
Next i  
End Function  

 

 

Поэлементное произведение массивов

Программный модуль Примечания
Function element_pr(A, B) As Variant Возвращается массив-строка.
Dim n1, n2 As Single, n As Single  
Dim C() As Single Начальное описание рабочего массива.
n1 = A.Rows.Count Число строк в объекте А.
n2 = B.Rows.Count Число строк в объекте В.
n = Application.Min(n1, n2) Минимальное число строк.
ReDim C(1 To n) Динамическая размерность. По умолчанию начальный индекс равен нулю, здесь - единица.
For i = 1 To n  
C(i) = A(i) * B(i) Объекты А и В рассматриваются как массивы.
Next i  
element_pr = C Присвоение ссылки на объект.
End Function  

Функции Application

Предположим, что в некотором программном модуле требуется вычислить сумму произведений соответствующих элементов двух массивов (скалярное произведение векторов). Безусловно, это можно выполнить организацией цикла (см. выше). Однако мы прекрасно помним, что в Excel имеется специальная функция, выполняющая упомянутую операцию. С целью определить ее название, а затем воспользоваться ею, запишем макрос с функцией СУММПРОИЗВ():

Sub Макрос1()

ActiveCell.FormulaR1C1 = "=SUMPRODUCT(R[-3]C[-1]:R[-1]C[-1],R[-3]C:R[-1]C)"

End Sub

Мы видим, как называется функция, сколько у нее параметров, помним, что мы делали, поэтому догадываемся о смысле параметров. Отсюда, используя вторую строку, мы можем с благодарностью воспользоваться интеллектом разработчиков Excel и записать функцию пользователя, выполняющую аналогичную работу:

Public Function product(a, b) As Single

product = Application.SumProduct(a, b)

End Function

Операторы принятия решения

Специфика использования операторов принятия решений, условной и безусловной передачи управления в отличие от СИ заключается лишь в формате представления операторов.

Оператор If

Формат: if логическое_выражение then оператор - стандартный оператор Basic. В правой части может быть составной оператор (операторы разделяются двоеточием). Например, if x>a then x=a: y=b: z=x+y.

В операции отношения дополнительно к стандартным операциям (=, <, >, <=, >=, <>) включены:

Is - идентично (только для объектов), например в операторе If TypeOf MyControl Is CommandButton Then …;

Like - позволяет применять подстановочные символы:? - любой символ, * любые символы, # - любая цифра, [CC] - список символов, [!CC] - исключая список символов.

Логические функции проверки величин возвращают Истину согласно табл. 4.1.

Таблица 4.1

Функция True, если Функция True, если Функция True, если
IsArray() Массив Is Date() Дата IsNull() Nul
IsEmpty() Пустая строка IsError() Код ошибки IsMissing() Опущен
IsNumeric() Число IsObject() Объект    

Таблица 4.2

A B Not A A And B A Or B A Xor B A Imp B A Eqv B
T T F T T F T T
T F F F T T F F
F T T F T T T F
F F T F F F T T

Блочная структура if

Формат Пример Пример
if логическое выражение then if x>a then If IsMissing (R) Then
блок операторов x=a y=b z=x+y R=5,25 ' один оператор, который не имело смысла выделять в отдельный блок
End if End if End if

Многоблочная структура if

Формат оператора Пример Комментарий
if логическое выражение then if x>a then Первое условие
блок операторов y=b z=5  
Elseif логическое выражение then Elseif x=a then Следующееусловие
блок операторов y=c  
Else Else  
блок операторов y=d z=0 Выполняется, если ни одно предыдущее условие не выполнено
End if End if  

 

Логические операции: Not (отрицание), And (Лог. "И"), Or (Лог. "ИЛИ"), Xor (исключающее "ИЛИ"), Imp (импликация), Eqv (эквивалентность) и результаты их выполнения представлены в табл. 4.2, где T – Истина, F – Ложь.

Select Case

Структура Select Case - это особый вид управляющей структуры if. Она применяется, когда одна величина участвует во всех логических сравнениях, и определяет, какой блок когда будет выполняться. Наиболее часто Select Case используется в тех случаях, когда сравниваемая величина является целым числом - селектором или индексом. Формат оператора:

Select Case величина

Case сравнение1

блок операторов 1

Case сравнение 2

блок операторов 2

...

Case Else

блок операторов, выполняемый, если не был выполнен ни один из всех записанных выше операторов.

End Select

В отличие от СИ после завершения блока Case управление передается не следующему оператору, а оператору End Select.

Примеры допустимых операторов Case

Case 23 (простое целое число); Case 1,3,5 (список чисел); Case “Мария” (текст); Case 1, 2, 7 To 9, 11 (диапазон); Case Is<0, 1, 3, 5 To 9, Is>15 (отношение).

Безусловный переход

Формат: Go To Метка. Оператор выполняет переход на оператор с меткой. Метка записывается в начале строки с двоеточием. Во избежание дополнительных ошибок в программе оператор Go To лучше не применять (неструктурированные переходы).



Поделиться:


Последнее изменение этой страницы: 2016-08-26; просмотров: 287; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.37.219 (0.007 с.)