Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA_04_Массивы и циклы.doc
Скачиваний:
4
Добавлен:
15.08.2019
Размер:
82.43 Кб
Скачать

4.2. Операторы цикла

      1. Цикл со счётчиком

For ИндекснаяПеременная = НачальноеЗначение To КонечноеЗначение Step Шаг

группа_операторов

Next ИндекснаяПеременная

Оператор цикла ForNext повторяет выполнение группы операторов, пока значение индексной переменной изменяется от начального значения до конечного с шагом, указанным после слова Step. Ветвь Step Шаг является необязательной. В качестве начального и конечного значений могут использоваться численные переменные и константы, выражения или функции, возвращающие число. Если шаг не задан, то он полагается равным 1. При использовании индексной переменной после цикла следует помнить, что после выполнения цикла она содержит значение КонечноеЗначение+Шаг. Например, следующая программа выводит на экран окна со значениями индексной переменной цикла:

Sub N3()

Dim i As Integer

For i = 1 To 4

MsgBox "i=" & CStr(i)

Next i

End Sub

После слова Next ставится та же индексная переменная, что и после слова For. Об этом следует помнить при применении вложенных друг в друга циклов.

В следующей программе пользователь вводит с клавиатуры размер одномерного массива (переменная N), вводит его элементы с клавиатуры, а затем элементы массива выводятся на рабочий лист Excel:

Sub N4()

Dim A() As Single ‘объявление массива А без размеров как динамического

Dim i As Integer, N As Integer

N = InputBox("N=")

ReDim A(1 To N) As Single ‘задание размера массива А

For i = 1 To N

A(i) = InputBox("A(" & CStr(i) & ")=")

Next i

For i = 1 To N

Sheets("Лист1").Cells(1, i).Value = A(i)

Next i

End Sub

Ввод с клавиатуры элементов двумерного массива и вычисление суммы его элементов:

Sub MM()

Dim S() As Single

Dim i As Integer, j As Integer

Dim Sum As Single

i = InputBox("Введите число строк:")

j = InputBox("Введите число столбцов:")

ReDim S(1 To i, 1 To j) As Single

For k = 1 To i ‘ внешний цикл перебирает строки

For n = 1 To j ‘ внутренний - столбцы

S(k, n) = InputBox("Введите значение элемента " & CStr(k) & _

"-й строки, " & CStr(n) & "-го столбца“, _

"Ввод массива S")

Next n

Next k

For k = 1 To i

For n = 1 To j

Sum = Sum + S(k, n)

Next n, k ‘ В Basic допустимо и такое завершение вложенных циклов

MsgBox "Сумма элементов массива S:" & CStr(Sum)

End Sub

      1. Оператор For Each … Next

Оператор For EachNext повторяет выполнение группы инструкций для каждого элемента массива или группы:

For Each элемент In группа

группа_операторов

Next

Этот оператор работает только с элементами типа Variant или с объектами.

Для выхода из циклов For до завершения используется оператор Exit For. Например:

Function Summ()

Dim F(1 To 50) As Integer

Dim i As Integer, Limit As Integer

Sum = 0

Limit = InputBox("Введите индекс предела суммирования", _

"Массивы и циклы")

For i = 1 To 50

If i < Limit Then

F(i) = 0.98 * i ^ 2

Sum = Sum + F(i)

Else

Exit For

End If

Next i

MsgBox "Сумма элементов массива при i = 1,..., " & _

CStr(limit) & " равна " & CStr(Sum)

End Function

В этом примере в цикле вычисляются все значения массива и, в переменную Sum, накапливается сумма элементов массива от 1-го индекса до введённого предела.

Следующий пример демонстрирует работу с динамическим массивом. Пользователь с клавиатуры вводит число строк и столбцов в двумерном массиве, а затем вычисляется сумма элементов массива.

Выполните задание 2.