Примеры операторы while в vba excel в массивах: Оператор While…End While — Visual Basic

Оператор While…End While — Visual Basic






Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья



Выполняет последовательность операторов, если заданное условие имеет значение True.

Синтаксис

While condition
    [ statements ]
    [ Continue While ]
    [ statements ]
    [ Exit While ]
    [ statements ]
End While

Компоненты

ТерминОпределение
conditionОбязательный. Выражение Boolean. Если condition имеет значение Nothing, Visual Basic обрабатывает его как False.
statementsНеобязательный элемент. Один или несколько операторов после While, которые выполняются каждый разcondition, — .True
Continue WhileНеобязательный элемент. Передает управление следующей итерации While блока.
Exit WhileНеобязательный элемент. Передает управление из While блока.
End WhileОбязательный. Завершает определение блока While.

Используйте структуру While...End While , если требуется повторять набор операторов неограниченное количество раз, пока условие остается True. Если вы хотите больше гибкости с тем, где вы проверяете условие или на какой результат вы тестируете его, вы можете предпочесть do… Оператор Loop. Если вы хотите повторять инструкции заданное количество раз, выполните for… Как правило, лучше выбрать следующий оператор.

Примечание

Ключевое слово While также используется в … Оператор Loop, предложение Skip While и Предложение Take While.

Если condition имеет значение True, все statements выполняются до тех пор, End While пока не будет обнаружена инструкция . Затем элемент управления возвращается к оператору While и condition снова проверяется. Если condition параметр по-прежнему Trueимеет значение , процесс повторяется. Если это False, элемент управления передается оператору, который следует за оператором End While .

Оператор While всегда проверяет условие перед запуском цикла. Цикл продолжается, пока условие остается True. Если condition это False при первом входе в цикл, он не запускается ни разу.

Обычно condition является результатом сравнения двух значений, но это может быть любое выражение, результатом которого является логическое значение типа данных (True или False). Это выражение может содержать значение другого типа данных, например числового типа, которое было преобразовано в Boolean.

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

Выход в режиме «Пока»

Оператор Exit While может предоставить другой способ выхода из While цикла. Exit While немедленно передает управление оператору, который следует за оператором End While .

Обычно используется Exit While после оценки некоторых условий If...Then...Else (например, в структуре). Вы можете выйти из цикла, если обнаружите условие, которое делает ненужным или невозможным продолжение итерации, например ошибочное значение или запрос на завершение. Вы можете использовать при Exit While проверке условия, которое может привести к бесконечному циклу, который может выполняться очень большое или даже бесконечное количество раз. Затем можно использовать для Exit While экранирования цикла.

Вы можете разместить любое количество операторов Exit While в While любом месте цикла.

При использовании во вложенных While циклах Exit While управление передается из самого внутреннего цикла и на следующий более высокий уровень вложенности.

Оператор Continue While немедленно передает управление следующей итерации цикла. Дополнительные сведения см. в разделе Continue Statement.

Пример 1

В следующем примере операторы в цикле продолжают выполняться до тех пор, пока index переменная не будет больше 10.

Dim index As Integer = 0
While index <= 10
    Debug.Write(index.ToString & " ")
    index += 1
End While
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

Пример 2

В следующем примере показано использование операторов Continue While и Exit While .

Dim index As Integer = 0
While index < 100000
    index += 1
    ' If index is between 5 and 7, continue
    ' with the next iteration.
    If index >= 5 And index <= 8 Then
        Continue While
    End If
    ' Display the index.
    Debug.Write(index.ToString & " ")
    ' If index is 10, exit the loop. 
    If index = 10 Then
        Exit While
    End If
End While
Debug.WriteLine("")
' Output: 1 2 3 4 9 10

Пример 3

В следующем примере считываются все строки в текстовом файле. Метод OpenText открывает файл и возвращает объект , StreamReader который считывает символы. В условии WhilePeek метод StreamReader определяет, содержит ли файл дополнительные символы.

Private Sub ShowText(ByVal textFilePath As String)
    If System.IO.File.Exists(textFilePath) = False Then
        Debug.WriteLine("File Not Found: " & textFilePath)
    Else
        Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath)
        While sr.Peek() >= 0
            Debug.WriteLine(sr.ReadLine())
        End While
        sr.Close()
    End If
End Sub

См. также раздел

  • Циклические структуры
  • Оператор Do…Loop
  • Оператор For…Next
  • Логический тип данных
  • Вложенные структуры управления
  • Оператор Exit
  • Оператор Continue






Программирование циклов, цикл do while

Организация выполнения повторяющихся действий в 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
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. Перезапустить макрос.

Цикл VBA через массив / для каждого элемента в массиве

Вернуться к примерам кода VBA

В этой статье

  • Для каждого элемента в массиве
  • Для следующего цикла
    • Цикл по части массива
    • Цикл по всему массиву

9001 9 Это руководство научит вас циклически перебирать массивы в VBA.

Существует два основных способа обхода массивов с помощью VBA:

  • Для каждого цикла — цикл For Each будет проходить по каждому элементу массива.
  • For Next Loop — цикл For Next будет проходить через указанные начальную и конечную позиции массива (мы можем использовать функции UBound и LBound для циклического обхода всего массива).

Для каждого элемента в массиве

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

 Sub LoopForArrayStatic()
   'объявить массив вариантов
   Dim strNames (от 1 до 4) как строка

   'заполнить массив
   стрНамес(1) = "Боб"
   strNames(2) = "Питер"
   strNames(3) = "Кит"
   strNames(4) = "Сэм"

   'объявить вариант для хранения элемента массива
   Тусклый элемент как вариант

   'перебрать весь массив
   Для каждого элемента в strNames
      'показать элемент в окне отладки.
      Отладка. Печать элемента
   Следующий элемент
Конец суб 

Описанная выше процедура будет перебирать все имена в массиве.

For Next Loop

For Next Loop будет перебирать каждый элемент в указанной начальной и конечной позициях массива.

Цикл через часть массива

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

 Sub LoopForNextStatic()
'объявить массив вариантов
   Dim strNames (от 1 до 4) как строка
'заполнить массив
   стрНамес(1) = "Боб"
   strNames(2) = "Питер"
   strNames(3) = "Кит"
   strNames(4) = "Сэм"
'объявить целое число
   Dim i как целое число
'цикл от позиции 2 до позиции 3 массива
   Для i = от 2 до 3
'показать имя в ближайшем окне
      Debug.Print strNames(i)
   Далее я
Конец суб 

В приведенном выше примере мы перебрали позиции 2 и 3 массива. Непосредственное окно вернет имена следующим образом.

Цикл по всему массиву

Далее мы будем использовать функции UBound и LBound для циклического просмотра всего массива. Это чрезвычайно полезно, если начальная и конечная позиции массива могут измениться (например, динамический массив):

 Sub LoopForNextDynamic()
'объявить массив вариантов
   Dim strNames() как строка
'инициализировать массив
   ReDim strNames (от 1 до 4)
'заполнить массив
   стрНамес(1) = "Боб"
   strNames(2) = "Питер"
   strNames(3) = "Кит"
   strNames(4) = "Сэм"
'объявить целое число
   Dim i как целое число
'цикл от нижней границы массива до верхней границы массива - весь массив
   Для i = LBound(strNames) To UBound(strNames)
'показать имя в ближайшем окне
      Debug.Print strNames(i)
   Далее я
Конец суб 

 

Кодирование VBA стало проще

Прекратите искать код VBA в Интернете. Узнайте больше об AutoMacro — конструкторе кода VBA, который позволяет новичкам создавать процедуры с нуля с минимальными знаниями в области кодирования и множеством функций, позволяющих сэкономить время для всех пользователей!

Узнать больше!

Надстройка примеров кода VBA

Удобный доступ ко всем примерам кода, найденным на нашем сайте.

Просто перейдите в меню, нажмите, и код будет вставлен прямо в ваш модуль. Надстройка .xlam.

(Установка не требуется!)

Скачать бесплатно

Оператор While…Wend (VBA) | Microsoft Узнайте

Редактировать

Твиттер

LinkedIn

Фейсбук

Электронная почта

  • Статья

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

Синтаксис

Пока условие [ операторы ] Wend

Синтаксис оператора While…Wend состоит из следующих частей:

Часть Описание
состояние Обязательно. Числовое выражение или строковое выражение, результатом которого является True или False . Если условие равно Null, условие рассматривается как False .
выписки Дополнительно. Один или несколько операторов выполняются, пока условие равно True .

Если условие равно True , все операторов выполняются до тех пор, пока не встретится оператор Wend . Затем управление возвращается к оператору While и снова проверяется условие . Если условие по-прежнему True , процесс повторяется. Если это не True выполнение возобновляется с оператора, следующего за оператором Wend .

Циклы While…Wend могут быть вложены на любом уровне. Каждый Wend соответствует самому последнему While .