Цикл for vba word

Доброго времени суток! Данную статью я решил посвятить рубрике по основам программирования в Visual Basic for Application. И сегодня мы поговорим о циклах в VBA, разберём их синтаксис и рассмотрим несколько примеров, которые часто встречаются программисту.

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

В данной статье мы разберём синтаксис и примеры следующих циклов в VBA:

  • For
  • For each
  • While
  • Until

Цикл For в VBA

Блок схема цикла for
Цикл for в VBA обычно используется при зацикливании фрагмента кода, если нам известно конечное значение counter — счетчика, при котором мы выйдем из цикла.
Возьмём для примера самый распространённый пример:

Сгенерировать массив из 5 целых значений

Dim mas(5) As Integer
For i% = 0 To 4
    mas(i) = Int((10 * Rnd) + 1)
Next i

Обратите ваше внимание, что в этом примере используется неявное объявление при работе с циклами в VBA. i% — означает неявное объявление переменной i в формате integer. Такая конструкция по сути заменяет следующую: dim i as integer. Это используется для сокращения кода и для удобства написания и чтения. В старых версиях VBA необходимо указывать знак формата после каждого использования неявной переменной. В более поздних версиях достаточно всего один раз.

VBA для цикла for даёт возможность использовать функцию Step. Как ясно из перевода, это шаг, с которым мы будем проходить наш интервал. По умолчанию, он равен 1. Популярный вариант использования встречается в случаях, когда counter связан с переменной, используемой внутри цикла. Например, при написании программ, связанных с функциями.

Найти пересечение графика функции y = 5*x + 5 с осью ординат

Function expr(x As Integer) As Integer
    expr = 5 * x + 5
End Function
Sub CodeTown()
    Dim i As Integer
    For i = -10 To 10 Step 1
        If expr(i) = 0 Then MsgBox "При Y = 0, Х = "+ CStr(i)
    Next i
End Sub

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

Function expr(x As Integer) As Integer
    expr = 5 * x + 5
End Function
Sub CodeTown()
    Dim i As Integer
    For i = -10 To 10 Step 1
        If expr(i) = 0 Then
            MsgBox "При Y = 0, Х = "+ CStr(i)
            Exit For
        End If
    Next i
End Sub

C помощью команды Exit можно закончить выполнение любого цикла в VBA. Достаточно указать после Exit название используемого цикла. Также им возможно завершить работу любой процедуры или функции.

Цикл For Each в VBA

Блок схема For Each
For Each в VBA основан на переборе всех элементов, указанного типа в массиве, объекте или группе.
Самый популярный вариант его использования — перебор страниц в рабочей книге.

Вывести названия всех листов в рабочей книге

For Each ws In ThisWorkbook.Worksheets
    MsgBox ws.Name
Next ws

И ещё один интересный пример:

Изменить размер шрифта и выравнить по центру текст в label

For Each element In UserForm1.Controls
    If InStr(1, UserForm1.Controls.Item(i%).Name, "Label") > 0 Then
        UserForm1.Controls.Item(i%).TextAlign = fmTextAlignCenter
        UserForm1.Controls.Item(i%).Font.Size = 20
        i% = i% + 1
    End If
Next element

Тут следует понимать, что через Controls можно обратиться к любому элементу формы. Если отфильтровать по имени, например, как мы сделали выше, то можно выделить группы элементов и изменить их свойства. В данном случае, размер шрифта и выравнивание.

Цикл While в VBA

Цикл while VBA
Циклы в VBA, которые используют структуру Do..Loop (это while и until циклы) можно записывать с разным расположением фрагмента условия. Как видите на картинке выше, условие может проверяться после выполнения одной итерации, а может перед запуском цикла.
Самый популярный пример:

Отсортируйте по возрастанию сгенерированный массив методом пузырька

Dim mas(5) As Integer
For i% = 0 To 4
    mas(i%) = Int((10 * Rnd) + 1)
Next i
Dim count As Integer, temp As Integer
count = 1
Do While count > 0
    count = 0
    For i% = 0 To 3
        If mas(i) > mas(i + 1) Then
            temp = mas(i)
            mas(i) = mas(i + 1)
            mas(i + 1) = temp
            count = count + 1
        End If
    Next i%
Loop

В вышеуказанном примере мы отсортировали массив с рандомными значениями в порядке возрастания. Метод пузырька считается достаточно долгим, но простым в реализации. В основном, им сортируют небольшие числовые массивы.

Цикл Until в VBA

Цикл Until VBA
Как видите, отличия от while крайне несущественные. Цикл Until в VBA можно реализовать с помощью конструкции while NOT (condition). Тем не менее, приведу пример:

Заставить пользователя ввести число

Dim temp As Variant
Do
    temp = InputBox("Введите число")
Loop Until IsNumeric(temp)

Почему заставить? Потому, что если пользователь закроет окно ввода, это его не спасёт, оно будет появляться вновь и вновь пока он не введёт любое число.

На этом мы закончим. Сегодня мы рассмотрели важную тему циклов в VBA, разобрали основные примеры. Конечно все примеры по этой обширной теме сложно разобрать, но, тем не менее, основы вы должны понять. Оставляйте ваши комментарии, если у вас возникли вопросы.
Скачать исходник

Может возникнуть ситуация, когда вам нужно выполнить блок кода несколько раз. В общем случае операторы выполняются последовательно: сначала выполняется первый оператор в функции, затем второй и т. Д.

Содержание:

  • for цикл
  • Синтаксис
  • Диаграмма потока
  • пример
  • for … loop
  • Синтаксис
  • пример
  • while..wend loop
  • Синтаксис
  • Диаграмма потока
  • пример
  • Цикл do..while
  • Синтаксис
  • Диаграмма потока
  • пример
  • Альтернативный синтаксис
  • пример
  • do..intil loop
  • Синтаксис
  • Диаграмма потока
  • пример
  • Альтернативный синтаксис
  • Диаграмма потока
  • пример
  • Записи управления циклом
  • Контрольное заявление и описание
  • Выход для оператора
  • Синтаксис
  • Диаграмма потока
  • пример
  • Exit Do
  • Синтаксис
  • пример

Языки программирования предоставляют различные структуры управления, которые обеспечивают более сложные пути выполнения.

Оператор цикла позволяет нам выполнять оператор или группу операторов несколько раз. Ниже приведен общий вид оператора цикла в VBA.

VBA предоставляет следующие типы циклов для обработки требований циклирования. Нажмите следующие ссылки, чтобы проверить их детали.

Цикл for — это структура управления повторением, которая позволяет разработчику эффективно писать цикл, который необходимо выполнить определенное количество раз.

Синтаксис

Ниже приведен синтаксис цикла for в VBA.

For counter = start To end [Step stepcount]
   [statement 1]
   [statement 2]
   ....
   [statement n]
   [Exit For]
   [statement 11]
   [statement 22]
   ....
   [statement n]
Next

Диаграмма потока

Работа с циклами в VBA:loop, for each, for next

Ниже приведен поток управления в режиме Loop —

  • Первый шаг выполняется. Этот шаг позволяет инициализировать любые переменные управления контурами и увеличивать переменную счетчика шагов.
  • Во-вторых, условие оценивается. Если это правда, выполняется тело цикла. Если оно ложно, тело цикла не выполняется, и поток управления переходит к следующему оператору сразу после цикла For.
  • После выполнения цикла цикла For поток управления переходит к следующему оператору. Этот оператор позволяет вам обновлять любые переменные управления циклом. Он обновляется на основе значения счетчика шагов.
  • Условие теперь оценивается снова. Если это правда, цикл выполняется, и процесс повторяется (тело цикла, затем увеличивают шаг, а затем снова условие). После того, как условие становится ложным, цикл For заканчивается.

пример

Добавьте кнопку и добавьте следующую функцию.

Private Sub Constant_demo_Click()
   Dim a As Integer
   a = 10
   
   For i = 0 To a Step 2
      MsgBox "The value is i is : " & i
   Next
End Sub

Когда приведенный выше код компилируется и выполняется, он производит следующий результат.

The value is i is : 0
The value is i is : 2
The value is i is : 4
The value is i is : 6
The value is i is : 8
The value is i is : 10

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

for … loop

Для каждого цикла используется для выполнения оператора или группы операторов для каждого элемента в массиве или коллекции.

Для каждого цикла аналогичен For Loop; однако цикл выполняется для каждого элемента в массиве или группе. Следовательно, счетчик шагов не будет существовать в этом типе цикла. Он в основном используется с массивами или используется в контексте объектов файловой системы, чтобы работать рекурсивно.

Синтаксис

Ниже приведен синтаксис цикла For Each в VBA.

For Each element In Group
   [statement 1]
   [statement 2]
   ....
   [statement n]
   [Exit For]
   [statement 11]
   [statement 22]
Next

пример

Private Sub Constant_demo_Click()  
   'fruits is an array
   fruits = Array("apple", "orange", "cherries")
   Dim fruitnames As Variant
 
   'iterating using For each loop.
   For Each Item In fruits
      fruitnames = fruitnames & Item & Chr(10)
   Next
   
   MsgBox fruitnames
End Sub

Когда вышеуказанный код выполняется, он печатает все имена фруктов с одним элементом в каждой строке.

apple
orange
cherries

Это выполняется, если в группе есть хотя бы один элемент и повторяется для каждого элемента в группе.

while..wend loop

В цикле While While … Wend , если условие равно True, все операторы выполняются до тех пор, пока не встретится ключевое слово Wend.

Если условие ложно, цикл завершается, и элемент управления переходит к следующему оператору после ключевого слова Wend .

Синтаксис

Ниже приведен синтаксис цикла While..Wend в VBA.

While condition(s)
   [statements 1]
   [statements 2]
   ...
   [statements n]
Wend

Диаграмма потока

Работа с циклами в VBA:loop, for each, for next

пример

Private Sub Constant_demo_Click()
   Dim Counter :  Counter = 10   
   
   While Counter < 15     ' Test value of Counter.
      Counter = Counter + 1   ' Increment Counter.
      msgbox "The Current Value of the Counter is : " & Counter
   Wend   ' While loop exits if Counter Value becomes 15.
End Sub

Когда вышеуказанный код выполняется, он выводит следующее в поле сообщения.

The Current Value of the Counter is : 11
The Current Value of the Counter is : 12
The Current Value of the Counter is : 13
The Current Value of the Counter is : 14
The Current Value of the Counter is : 15

Это проверяет условие перед выполнением тела цикла.

Цикл do..while

Do … while цикл используется, когда мы хотим повторить набор операторов, пока условие истинно. Условие может быть проверено в начале цикла или в конце цикла.

Синтаксис

Ниже приведен синтаксис цикла Do … While в VBA.

Do While condition
   [statement 1]
   [statement 2]
   ...
   [statement n]
   [Exit Do]
   [statement 1]
   [statement 2]
   ...
   [statement n]
Loop           

Диаграмма потока

Работа с циклами в VBA:loop, for each, for next

пример

В следующем примере используется цикл Do … while для проверки состояния в начале цикла. Операторы внутри цикла выполняются, только если условие становится True.

Private Sub Constant_demo_Click()
   Do While i < 5
      i = i + 1
      msgbox "The value of i is : " & i
   Loop
End Sub

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

The value of i is : 1
The value of i is : 2
The value of i is : 3
The value of i is : 4
The value of i is : 5

Альтернативный синтаксис

Существует также альтернативный синтаксис для Do … while loop, который проверяет состояние в конце цикла. Основное различие между этими двумя синтаксисами объясняется в следующем примере.

Do 
   [statement 1]
   [statement 2]
   ...
   [statement n]
   [Exit Do]
   [statement 1]
   [statement 2]
   ...
   [statement n]
Loop While condition

пример

В следующем примере используется цикл Do … while для проверки состояния в конце цикла. Заявления внутри цикла выполняются хотя бы один раз, даже если условие False.

Private Sub Constant_demo_Click() 
   i = 10
   Do
      i = i + 1
      MsgBox "The value of i is : " & i
   Loop While i < 3 'Condition is false.Hence loop is executed once.
End Sub

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

The value of i is : 11

Операторы do..While будут выполняться до тех пор, пока условие равно True. (Т. Е.) Петля должна повторяться до тех пор, пока условие не будет False.

do..intil loop

Do … intil цикл не будет использован, когда мы хотим повторить набор операторов, пока условие ложно. Условие может быть проверено в начале цикла или в конце цикла.

Синтаксис

Ниже приведен синтаксис цикла Do..Until в VBA.

Do Until condition
   [statement 1]
   [statement 2]
   ...
   [statement n]
   [Exit Do]
   [statement 1]
   [statement 2]
   ...
   [statement n]
Loop    

Диаграмма потока

Работа с циклами в VBA:loop, for each, for next

пример

В следующем примере используется Do … До цикла, чтобы проверить условие в начале цикла. Операторы внутри цикла выполняются только в том случае, если условие ложно. Он выходит из цикла, когда условие становится истинным.

Private Sub Constant_demo_Click() 
   i = 10
   Do Until i>15  'Condition is False.Hence loop will be executed
      i = i + 1
      msgbox ("The value of i is : " & i)
   Loop 
End Sub

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

The value of i is : 11
The value of i is : 12
The value of i is : 13
The value of i is : 14
The value of i is : 15
The value of i is : 16

Альтернативный синтаксис

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

Do 
   [statement 1]
   [statement 2]
   ...
   [statement n]
   [Exit Do]
   [statement 1]
   [statement 2]
   ...
   [statement n]
Loop Until condition

Диаграмма потока

Работа с циклами в VBA:loop, for each, for next

пример

В следующем примере используется Do … До цикла, чтобы проверить условие в конце цикла. Операторы внутри цикла выполняются хотя бы один раз, даже если условие равно True.

Private Sub Constant_demo_Click()  
   i = 10
   Do 
      i = i + 1
      msgbox "The value of i is : " & i
   Loop Until i more15 'Condition is True.Hence loop is executed once.
End Sub

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

The value of i is : 11

Операторы do..Until будут выполняться до тех пор, пока условие False. (Т. Е.) Петля должна повторяться до тех пор, пока условие не будет истинным.

Записи управления циклом

Операторы управления циклом изменяют исполнение из своей обычной последовательности. Когда выполнение выходит из области действия, все остальные операторы цикла не выполняются.

Контрольное заявление и описание

Выход для оператора

Выход for используется , когда мы хотим , чтобы выйти из For Loop на основе определенных критериев. Когда Exit For выполняется, управление переходит к следующему оператору сразу после цикла For Loop.

Синтаксис

Ниже приведен синтаксис Exit For Statement в VBA.

Диаграмма потока

Работа с циклами в VBA:loop, for each, for next

пример

В следующем примере используется Exit For . Если значение счетчика достигает 4, цикл For Loop завершается, и управление переходит к следующему утверждению сразу после цикла For Loop.

Private Sub Constant_demo_Click()
   Dim a As Integer
   a = 10
   
   For i = 0 To a Step 2 'i is the counter variable and it is incremented by 2
      MsgBox ("The value is i is : " & i)
      If i = 4 Then
         i = i * 10 'This is executed only if i=4
         MsgBox ("The value is i is : " & i)
         Exit For 'Exited when i=4
      End If
   Next
End Sub

Когда вышеуказанный код выполняется, он печатает следующий вывод в окне сообщений.

The value is i is : 0
The value is i is : 2
The value is i is : 4
The value is i is : 40

Завершает оператор цикла For и передает выполнение в оператор сразу после цикла

Exit Do

Exit Do Заявление используется , когда мы хотим , чтобы выйти из Do Loops на основе определенных критериев. Он может использоваться как в Do Do … While, так и Do … До циклов.

Когда Exit Do выполняется, управление переходит к следующему оператору сразу после Do Loop.

Синтаксис

Ниже приведен синтаксис выражения Exit Do в VBA.

пример

В следующем примере используется Exit Do . Если значение счетчика достигает 10, выходная линия Do завершается, и управление переходит к следующему оператору сразу после цикла For Loop.

Private Sub Constant_demo_Click()
   i = 0
   Do While i <= 100
      If i > 10 Then
         Exit Do   ' Loop Exits if i>10
      End If
      MsgBox ("The Value of i is : " & i)
      i = i + 2
   Loop
End Sub

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

The Value of i is : 0
The Value of i is : 2
The Value of i is : 4
The Value of i is : 6
The Value of i is : 8
The Value of i is : 10

Завершает оператор Do While и передает выполнение в оператор сразу после цикла

 С уважением, авторы сайта Компьютерапия

Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

Оператор
цикла For
позволяет повторять группу операторов
заданное число раз. Синтаксис:

For
счётчик_цикла
=начало
TO
конец
[step
шаг]

Тело цикла

Next
[счётчик_цикла]

Здесь
счётчик_цикла—это
числовая переменная. В начале выполнения
цикла она принимает значение, задаваемое
числовым выражением начало.
Числовое выражение конец—
задает заключительное выражение счётчика
цикла. Числовое выражение шаг не
обязательно и по умолчанию=1. Тело
цикла

это последовательность операторов
которая будет выполнена заданное число
раз. Если шаг положителен, цикл завершится,
когда впервые выполнится условие:

счетчик_цикла>конец

Если шаг цикла
отрицателен, условие его завершения:

счетчик_цикла<конец

Это
условие проверяется перед началом
выполнения цикла, а затем—после каждого
прибавления шага к счётчику цикла в
операторе Next.
Если оно выполнено, управление передается
на оператор, следующий за Next,
нет—выполняются операторы из тела
цикла. Завершить цикл For…Next
можно и с помощью оператора Exit
For.
Такие операторы могут быть расположены
в тех местах тела цикла, где требуется
из него выйти не дожидаясь выполнения
условия завершения.

Пример использования оператора:

УСЛОВИЕ:

Вычислить значение
функции:

n

Y=
SlnX/2n

1

, где n=1,2,…,5

СХЕМА
АЛГОРИТМА ПРОГРММЫ

х

Y










N=1,5


Y=Y+lnx/2n

Порядок выполнения работы:

  1. Заполнить диапазон
    ячеек А1:А5 значениями Х.

  2. Текст программы:

Sub
mm
()

N=5
: Y=0

For i=1 to n

X=Worksheets(1).Cells(i,1)

Y=Y+log(x)/2^i

Next i

Worksheets(1).Range
(“A6”).Value = ”результат”

Worksheets(1).Range
(“A7”).Value = Y

End
Sub

2.Массивы.

  1. Описание массивов

Dim
<имя массива>(<начальное значение
индекса> To
<конечное значение индекса>) As
<тип элементов массива>

Пр:
Dim
A(1
To
10) As
Integer
— массив состоит из 10 элементов, тип
каждого элемента — Integer.

б)
Обращение
к элементу массива

Обращение к
элементу массива осуществляется
следующим образом: указывается имя
массива, а затем в круглых скобках
указывается номер элемнта в массиве.

Пр:
A(1)=5
— первому элементу массива А присваивается
значение 5

А(17)=А(1)
— 17-ому элементу массива А присваивается
значение первого элемента массива А.

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

Массивы
можно вводить как с листа Excel,
так и испрользуя встроенную функцию
InputBox.

Пр:
вводятся
массивы А,В,С из 15 элементов:

For
i=1 To 15


Ввод массива A
с листа Excel,
используя свойство Range
(элементы вводятся из столбца А, строки
изменяютя с 1 по 15.

A(i)=Worksheets(1).Range(«A»
& i).Value


Ввод массива B
с листа Excel,
используя свойство Cells
(строки изменяются с 1 по 15, столбец 2
(столбец B)

B(i)=Worksheets(1).Cells(i,2)


Ввод массива C
через функциюInputBox

C(i)=InputBox(«Введите
» & i
& «ый элемент массива»)

Next
i

г)
Решение
задачи из примера через массивы

1. Заполнить диапазон
ячеек А1:А5 значениями элементов массива.

2. Текст
программы:

Sub
mm
()

Dim
A(1 to 5) As Integer

N=5

Y=0

For i=1 to n

A(i)=Worksheets(1).Cells(i,1)

Next i

For i=1 To n

Y=Y+log(A(i))/2^i

Next i

Worksheets(1).Range
(“A6”).Value = ”результат”

Worksheets(1).Range
(“A7”).Value = Y

End
Sub

ЗАДАНИЯ ДЛЯ
ВЫПОЛНЕНИЯ

  1. Найти количество
    положительных

  2. Найти количество
    отрицательных чисел.

  1. Найти сумму
    положительных

  2. Найти сумму
    отрицательных чисел.

  1. Найти
    количество элементов массива больших
    или равных заданному значению.

  1. Найти произведение
    положительных элементов массива.

  1. Найти сумму
    элементов, стоящих на четных местах
    .

  1. Найти сумму
    элементов стоящих на нечетных местах.

  1. Заменить
    отрицательные элементы нулями.

  1. Обнулить элементы,
    имеющие четный индекс.

  1. Найти произведение,
    элементов стоящих на четных местах.

  1. Сформировать
    новый массив по правилу: с[i]=x*sqrt(a[i]),
    где х—некоторая постоянная.

3.Двумерные массивы

а)
Описание массивов

Dim
<имя массива>(<начальное значение
индекса по строкам> To
<конечное значение индекса по строкам
>,

<
начальное значение индекса по столбцам>
To
< конечное значение индекса по столбцам>)
As
<тип элементов массива>

Пр:
Dim
A(1
To
10, 1 to
5) As
Integer
— массив состоит из 50 элементов (10 строк
и 5столбцов), тип каждого элемента —
Integer.

б)
Обращение
к элементу массива

Обращение к
элементу массива осуществляется
следующим образом: указывается имя
массива, а затем в круглых скобках через
запятую указывается номер строки и
номер столбца, где размещен элемент в
массиве.

Пр:
A(1,4)=15
— элементу, находящемуся в первой строке
и четвертом столбце массива А присваивается
значение 15

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

Массивы
можно вводить как с листа Excel,
так и испрользуя встроенную функцию
InputBox.

  1. for i=1 to 10

for j=1 to 4

A(i,j)=InputBox(«Введите
A(» & i & «,» & j & «)»)

next j

next i

  1. for
    i=1 to 10

for j=1 to 4

A(i,j)=Worksheets(1).Cells(i,j)

next j

next i

г)
Изображение
ввода двумерных массивов в блок-схемах

СОДЕРЖАНИЕ ОТЧЕТА

  1. Название лабораторной
    работы.

  2. Цель работы.

  3. Задание

  4. Схема алгоритма.

  5. Текст программы.

  6. Выводы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
  • Цикл for vba excel пример
  • Цикл for excel формула
  • Цикл for each в vba excel примеры
  • Цикл excel или в формулах
  • Церковнославянский шрифт для word 2016