Массивы

Циклы

Циклы предназначены для многократного выполнения группы инструкций. В 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.

Различают статические и динамические массивы.