Массивы
Циклы
Циклы предназначены для многократного выполнения группы инструкций. В VBA для организаций циклов используются инструкции For…next, While…Wend, Do …Loop и For Each… Next.
Инструкция For…next
Эта инструкция повторяет выполнение группы инструкций указанное число раз.
Синтаксис инструкции For…next:
For Счетчик = Начало To Конец [Step Шаг]
[Инструкции]
[Exit For]
[Инструкции]
Next[Счетчик]
Синтаксис инструкции содержит For…next элементы, представленные в табл. 1.
Таблица Элементы синтаксиса инструкции For…next
Элемент | Описание |
Счетчик | Обязательный элемент. Числовая переменная (за исключением типа Boolean), используемая в качестве счетчика цикла. Эта переменная не может быть элементом массива |
Начало | Обязательный элемент — начальное значение переменной Счетчик |
Конец | Обязательный элемент конечное значение переменной Счетчик |
Шаг | Необязательный элемент — представляет собой значение, на которое изменяется счетчик при каждом выполнении тела цикла. По умолчанию шаг равен единице |
Инструкции | Необязательный элемент — одна или несколько инструкций. составляющих тело цикла |
Аргумент Шаг может быть как положительным, так и отрицательным. Значение этого аргумента определяет выполнение цикла в соответствии с правилами, приведенными в табл. 2.
Таблица 2. Выполнение цикла в зависимости от значения аргумента Шаг
Значение | Условие |
Положительное или 0 Отрицательное | Счетчик<= Конец Счетчик>= Конец |
После выполнения всех инструкций цикла значение элемента Шаг добавляется к текущему значению переменной Счетчик. После этого инструкции цикла либо выполняются еще раз, либо цикл завершается (если значение счетчика сравниваетcя со значением элемента конец) и выполнение программы продолжается с инструкции, следующей за инструкцией Next.
Пример цикла For…Next
Подсчитать сумму четных чисел в диапазоне от 0 до 10 включительно.
Sub p1()
Dim i As Integer, sum As Integer
For i = 0 To 10 Step 2
sum = sum + i
Next i
MsgBox "sum=" & sum
End Sub
Подсчитать произведение четных чисел в диапазоне от 2 до 10 включительно.
Sub p2()
Dim i As Integer, pr As Integer
pr = 1
For i = 2 To 10 Step 2
pr = pr * i
Next i
MsgBox "pr=" & pr
End Sub
Допускается организация вложенных циклов For..Next. При этом счетчик каждого цикла должен иметь уникальное имя.
Пример вложенных циклов: создать таблицу умножения.
Sub p3()
Dim i, j As Integer
Dim a(2 To 9, 1 To 10), str_a
For i = 2 To 9
For j = 1 To 10
a(i, j) = i & "x" & j & "=" & (i * j)
str_a = str_a & " " & a(i, j) & " "
Next j, i
MsgBox str_a
End Sub
Инструкция Do…Loop
Инструкция Do…Loop имеет два варианта синтаксиса: в первом варианте условие проверяется в начале цикла, во втором условие проверяется после выполнения инструкций тела цикла.
При использовании ключевого слова While цикл будет выполняться, пока условие имеет значение True, со словом Until - пока условие не примет значение True.
Первый вариант синтаксиса инструкции Do…Loop:
Do [{While | Until} Условие]
[Инструкции]
[Exit Do]
[Инструкции]
loop
Пример. Даны два положительных целых числа найти их наибольший общий делитель (например 45 и 27 нод=9)
Sub nod()
Dim a, b, r, nod
a = Val(InputBox("введите a:"))
b = Val(InputBox("введите b:"))
Do While (a Mod b) <> 0
r = a Mod b
a = b
b = r
Loop
nod = b 'nod – наибольший общий делитель
MsgBox "a=" & a & " " & "b=" & b & Chr(10) & Chr(13) & _
"nod=" & nod
End Sub
Пример. Определение простого числа. Например 11 mod 2=1,
11 mod 3=2, 11 mod 4=2, 11 mod 5=1, 11 mod 6=5, 11 mod 7=4,
11 mod 8=3, 11 mod 9=2, 11 mod 10=1, 11 mod 11=0, 11 простое число.
Sub prostoe()
Dim n, d, r
n = Int(Rnd * 100) + 1
d = 2
Do While n Mod d <> 0
r = n Mod d
d = d + 1
Loop
If d = n Then
MsgBox "n простое число" & " " & "n=" & n
Else
MsgBox "n – непростое число" & " " & "n=" & n
End If
End Sub
Второй вариант синтаксиса инструкций Do… Loop
Do
[Инструкции]
[Exit Do]
[Инструкции]
Loop [{While | Until} Условие]
Пример. Определение простого числа.
Sub prostoe1()
Dim n, d, r
n = Int(Rnd * 100) + 1
d = 2
Do
r = n Mod d
d = d + 1
Loop While n Mod d <> 0
If d = n Then
MsgBox "n простое число " & "n=" & n
Else
MsgBox "n не простое число" & " " & "n=" & n
End If
End Sub
Таблица 3, Элементы синтаксиса инструкции Do Loop
Элемент | Описание |
Условие | Необязательный элемент. Представляет числовое выражение или строковое выражение, которое имеет значение True или False. Если условие имеет значение Null, то оно рассматривается как значение False. |
Инструкции | Одна или несколько инструкций, выполнение которых повторяется до тех пор, пока условие имеет значение True или пока оно не приобретет значение True. |
В первом варианте синтаксиса цикла Do..Loop и в цикле сначала всегда проверяется условие, поэтому возможна ситуация, когда инструкции могут ни разу не выполняться. Во втором варианте синтаксиса Do..Loop инструкции, составляющие тело цикла, будут выполнены по крайней мере один раз.
Лекция 4
Массивы данных представляют собой последовательность однотипных переменных, которые объедены одним общим именем. Каждая отдельно взятая переменная называется элементом массива, элемент массива имеет свой индекс. Каждому элементу массива может быть присвоено одно числовое или символьное значение, поэтому различают массивы числовые и символьные. Кроме того, массивы могут быть одномерными и многомерными.
Одномерный массив можно представить как строку или столбец переменных, а двумерный – как таблицу или матрицу, в которой переменные расположены в m строках и n столбцах.
Определение массивов. Массивы в столбцах должны быть определены в операторе Dim.
Различают статические и динамические массивы.