Примеры операторы 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 который считывает символы. В условии While
Peek метод 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 Узнайте
Редактировать
Твиттер
Фейсбук
Электронная почта
- Статья
Выполняет серию инструкций, пока заданное условие True .
Синтаксис
Пока условие [ операторы ] Wend
Синтаксис оператора While…Wend состоит из следующих частей:
Часть | Описание |
---|---|
состояние | Обязательно. Числовое выражение или строковое выражение, результатом которого является True или False . Если условие равно Null, условие рассматривается как False . |
выписки | Дополнительно. Один или несколько операторов выполняются, пока условие равно True . |
Если условие равно True , все операторов выполняются до тех пор, пока не встретится оператор Wend . Затем управление возвращается к оператору While и снова проверяется условие . Если условие по-прежнему True , процесс повторяется. Если это не True выполнение возобновляется с оператора, следующего за оператором Wend .
Циклы While…Wend могут быть вложены на любом уровне. Каждый Wend соответствует самому последнему While .