Оператор цикла Do – Loop
В VBA для организации циклов с неизвестным заранее числом повторений используются и другие операторы циклов:
1.
Do While Условие
Блок операторов
Loop
2.
Do Until Условие
Блок операторов
Loop
3.
Do
Блок операторов
Loop While Условие
4.
Do
Блок операторов
Loop Until Условие
Оператор Do While – Loop обеспечивает многократное выполнение блока операторов до тех пор, пока условие истинно, а оператор Do Until – Loop – пока условие ложно.
Операторы Do – Loop While и Do – Loop Until отличаются от первых двух операторов тем, что сначала выполняется блок операторов, а затем проверяется условие. Таким образом, в этих циклах блок операторов, составляющих тело цикла, выполнится по крайней мере один раз.
Приведем пример использования цикла Do – Loop While при нахождении корня уравнения f(x) = 0 методом Ньютона.
Для нахождения приближенного значения корня уравнения методом Ньютона необходимо задать начальное приближение х0, а затем определить последующие приближения к корню методом итерации по формуле
f(xn–1)
xn = xn –1 – , где n = 1, 2,…
f’(xn–1)
Процесс останавливается при выполнении неравенства |xn–xn–1| £ e, где e – точность определения корня.
Уравнение x2 = 2, начальное приближение к корню – число 3, точность вычисления 0,00001.
Ответ: х = 1,414207.
Программный код
Option Explicit
Sub PR12()
Const eps = 0.00001
Dim x0 As Double, x As Double
x = 3
Do
x0 = x
x = x – (x ^ 2 – 2) / (2 * x)
Loop While Abs(x – x0) > eps
MsgBox ("корень уравнения=" & x)
End Sub
Примером использования цикла Do – Loop Until может служить программа нахождения корня уравнения f(x) = 0 методом деления отрезка пополам.
Вычислим корень уравнения x2 = 2 с точностью до e = 0,00001. За отрезок начальной локализации корня берется отрезок [0; 2].
Ответ: х = 1,414207.
Программный код
Option Explicit
Sub PR13()
Dim c As Double, f As Double
Dim fa As Double, fb As Double, fc As Double
Dim a As Double, b As Double, eps As Double, bh As Double
a = 0: b = 2: eps = 0.00001
fa = a ^ 2 - 2
fb = b ^ 2 - 2
If fa * fb >= 0 Then
MsgBox ("Функция не меняет знак на концах отрезка")
Exit Sub ‘ выход из процедуры
End If
Do
c = (a + b) / 2
fc = c ^ 2 - 2
fa = a ^ 2 - 2
f = fc * fa
If f < 0 Then b = c Else a = c
Loop Until b - a < eps
bh = c
MsgBox ("значение корня=" & bh)
End Sub
Массивы
Часто бывает необходимо работать с некоторым набором однотипных данных как с единым целым. В таких случаях используются массивы – структурированные боксы для хранения множеств элементов данных одинакового типа.
Массивы могут быть одномерными и многомерными.
Одномерные массивы
Одномерный массив – это набор однотипных элементов, расположенных друг за другом в одной строке или столбце.
Пример
1 –34 8 2 6
или
-5
Каждый элемент массива обозначается при помощи имени массива и индекса, заключенного в круглые скобки.
Индекс может быть:
· константой
Пример
P(1), C(5)
· переменной целого типа
Пример
A(i), B(j)
· арифметическим выражением (значение арифметического выражения должно быть целым)
Пример
A(i*2), Q(i^j)
Объявление массива
Как и обычные переменные, массивы должны быть объявлены. Для описания массива используется оператор Dim.
Dim Имя массива (Размерность массива) As Тип элементов
Пример
Dim A (100) As Integer
Dim B (50) As Byte
Dim С (40) As Double
При таком описании массива его элементы индексируются (т.е. нумеруются), начиная с нуля.
Если оператор описания будет выглядеть следующим образом:
Dim A (1 To 100) As Integer,
то элементы массива индексируются с единицы.
Ввод массива
Перед обработкой массива его необходимо заполнить (ввести).
Массив будем считывать с рабочего листа Excel, в который числа заносятся вручную или при помощи счетчика случайных чисел.
1 способ. На рабочем листе введем числа в ячейки электронной таблицы (рис. 4), откроем окно программного кода и запишем в него программу, которая считывает данный массив чисел.
Рис. 4. Исходный массив
Программный код
Option Explicit
Sub PR14()
Dim A(20) As Integer
Dim i As Integer
For i = 1 To 6
A(i) = Cells(1, i) ‘ массив заполняется
Next i ‘ числами с рабочего листа Excel
End Sub
2 способ. Массив можно заполнить при помощи счетчика случайных чисел. Для этого в программе после объявления переменных следует написать следующее:
Randomize
For i = 1 To 10
Cells(1, i) = Int(Rnd * 100 – 50)
A(i) = Cells(1, i) ‘ заполнение массива
Next i
Функция Rnd возвращает значение от 0 до 1. Перед вызовом функции Rnd используется инструкция Randomize без аргумента для инициализации генератора случайных чисел значением, возвращаемым системным таймером.
Cells(1, i) означает ячейку электронной таблицы, находящуюся в первой строке и столбце с номером i.
Вообще оператор Cells(i, j) служит для вывода информации в ячейку электронной таблицы или считывания информации из ячейки электронной таблицы Excel. В скобках через запятую указываются номер строки – i и номер столбца – j ячейки электронной таблицы.
Пример
Cells(1, 2) = x ‘в ячейку B1 записывается информация из переменной х
х = Cells(1, 2) ‘из ячейки В1 считывают информацию в переменную х
Вывод массива
Для распечатки полученного массива на рабочий лист Excel используется следующая конструкция:
For i = 1 To n
Cells(k, i) = A(i) ‘ вывод массива в ячейки электронной таблицы
Next i ‘ k – номер строки для заполнения ячеек.
Вместо переменной k можно использовать конкретное значение, например 3, тогда массив распечатается в третьей строке рабочего листа.
После заполнения ячеек их содержимое можно посмотреть, свернув окно программного кода при помощи кнопки “Свернуть” или переключившись в окно Excel с помощью соответствующей кнопки на панели задач.
В VBA удобно пользоваться различными рабочими листами в одной программе. Для установки нужного рабочего листа используется следующая команда: