Организация выполнения повторяющихся действий в VBA может быть выполнена несколькими операторами, которые условно разделяют на цикл-пока, цикл-до, цикл-для.
Оператор While
Общий вид оператора While:
While выражение [инструкции] Wend
Оператор While предназначен для организации цикла-пока.
Инструкции будут выполняться пока выражение будет истинно.
Пример. Вычислить сумму чисел от 0 до 100.
Решение.
Sub сумма1() Dim x, s As Double x = 0 s = 0 While x <= 100 s = s + x x = x + 1 Wend MsgBox ("s=" + Str(s)) End Sub
Пояснение решения.
В переменной s накапливается значение суммы.
Оператор Do While
Общий вид оператора Do While:
Do [While выражение] [инструкции] [Exit Do] [инструкции1] Loop
Оператор Do While предназначен для организации цикла-пока.
Инструкции будут выполняться пока выражение будет истинно. Конструкция Exit Do предназначена для преждевременного выхода из цикла.
Пример. Вычислить сумму чисел от 0 до 100.
Решение.
Sub сумма2() Dim x, s As Double x = 0 s = 0 Do While x <= 100 s = s + x x = x + 1 Loop MsgBox ("s=" + Str(s)) End Sub
Оператор Do Loop Until
Общий вид оператора Do Loop Until:
Do [инструкции] [Exit Do] [инструкции1] Loop [Until выражение]
Оператор Do Loop Until предназначен для организации цикла-до.
Инструкции будут выполняться до момента, когда выражение станет истинным. Конструкция Exit Do предназначена для преждевременного выхода из цикла.
Пример. Вычислить сумму чисел от 0 до 100.
Решение.
Sub сумма3() Dim x, s As Double x = 0 s = 0 Do s = s + x x = x + 1 Loop Until x > 100 MsgBox ("s=" + Str(s)) End Sub
Оператор For
Общий вид оператора For:
For счетчик = начальное_знач To конечное_знач [Step шаг] [инструкции] [Exit For] [инструкции1] Next [счетчик]
Оператор For предназначен для организации цикла-для.
Инструкции будут выполняться определенное количество раз, задаваемое в счетчик, начиная с начального значение (начальное_знач) до конечного значения (конечное_знач) с некоторым шагом (шаг). Конструкция Exit For предназначена для преждевременного выхода из цикла.
Пример. Вычислить сумму чисел от 0 до 100.
Решение.
Sub сумма4() Dim x, s As Integer s = 0 For x = 0 To 100 s = s + x Next x MsgBox ("s=" + Str(s)) End Sub
Примеры решения задач
Пример 1. Представить таблицу квадратов чисел от 2 до 10.
Решение.
Для отображения результатов воспользуемся Excel и для доступа к ячейкам функцией Cells (номер_строки, номер_колонки).
Sub квадраты() Dim x Cells(2, 1).Value = "x" Cells(3, 1).Value = "x^2" For x = 2 To 10 Cells(2, x).Value = x Cells(3, x).Value = x ^ 2 Next x End Sub
Пример 2
Пример 2. Составить программу определения наибольшего общего делителя (НОД) двух натуральных чисел.
Решение.
Наибольший общий делитель двух натуральных чисел — это самое большое натуральное число, на которое они делятся. Например, у чисел 12 и 18 наибольшие делители: 2, 3, 6. наибольшим общим делителем является число 6. Это записывается так:
НОД(12, 18) = 6.
Идея алгоритма Евклида для нахождения НОД основана на том свойстве, что если M>N, то
НОД(M, N) = НОД(M-N, N).
Иначе говоря, НОД двух натуральных чисел равен НОД их положительной разности и меньшего числа.
Sub Евклид() Dim M, N, NOD M = Cells(1, 2) N = Cells(2, 2) While M <> N If M > N Then M = M - N Else N = N - M End If Wend NOD = M Cells(3, 2).Value = NOD End Sub
Пример 3
Пример 3. Построить график функции: улитку Паскаля.
Улитка Паскаля задается следующим образом:
x=A*cos(t)+B*cos(t) y=A*cos(t)sin(t)+B*sin(t), A>B, B>0, 0<=t<2*Pi
Решение.
1. Подготовить данные в электронной таблице
2. Ввести код программы.
Sub улитка_паскаля() Dim a, b, Pi, t As Double Dim i As Integer a = Cells(1, 2) b = Cells(2, 2) Pi = 3.14 i = 2 t = 0 While t <= 2 * Pi x = a * Cos(t) + b * Cos(t) y = a * Cos(t) * Sin(t) + b * Sin(t) Cells(3, i).Value = x Cells(4, i).Value = y t = t + 0.1 i = i + 1 Wend End Sub
3. Построить график с помощью мастера диаграмм, выбрав точечную диаграмму.
4. Изменить данные a и b.
A=2 B=1
5. Перезапустить макрос.