Цикл в макросе excel: Все циклы VBA в Excel читать в подробной статье

Все циклы VBA в Excel читать в подробной статье

Рамакришна, Источники индийской мудрости

Сейчас … мы идем по кругу

Эта статья содержит полное руководство по VBA Do While и VBA While Loops. (Если вы ищете информацию о циклах VBA For и For Each, перейдите сюда)

Цикл VBA While существует, чтобы сделать его совместимым со старым кодом. Однако Microsoft рекомендует использовать цикл Do Loop, поскольку он более «структурирован и гибок». Оба этих цикла рассматриваются в этом посте.

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

Если вы ищете что-то конкретное, вы можете посмотреть содержание ниже.

Содержание

  1. Краткое руководство по VBA While Loops
  2. Введение
  3. Цикл For против цикла Do While
  4. Условия
  5. Формат цикла Do
  6. Цикл Exit Do
  7. While Wend
  8. Бесконечный цикл
  9. Использование функций Worksheet вместо циклов
  10. Резюме

Краткое руководство по VBA While Loops

Формат циклаОписаниеПример
Do While … LoopЗапускается 0 или более раз, пока условие выполняетсяDo While result = «Верно»
Loop
Do … Loop WhileЗапускается 1 или более раз, пока условие выполняетсяDo 
Loop While result = «Верно»
Do Until … LoopЗапускается 0 или более раз, пока условие не будет выполненоDo Until result <> «Верно»
Loop
Do … Until LoopЗапускается 1 или более раз, пока условие не будет выполненоDo 
Loop Until result <> «Верно»
While … Wend
R
Запускается 0 или более раз, пока условие истинно.
Примечание: этот цикл считается устаревшим.
While result = «Верно»
Wend
Exit the Do LoopЗавершает DoDo While i < 10
   i = GetTotal
   If i < 0 Then
      Exit Do
   End If
Loop

Введение

Если вы никогда ранее не использовали циклы, тогда вы можете прочитать «Что такое циклы и зачем они вам нужны» из моего поста в журнале For Loop.

Я собираюсь сосредоточиться в основном на Do Loop в этой статье. Как я упоминал выше, мы видели, что цикл While Wend считается устаревшим. Для полноты информации я все равно его включил в эту статью.

Итак, во-первых, зачем нам нужны циклы Do While, когда у нас уже есть циклы For?

Цикл For против цикла Do While

Когда мы используем цикл For Loop, мы заранее знаем, сколько раз мы хотим его запустить. Например, мы можем захотеть запустить цикл один раз для каждого элемента в коллекции, массиве или словаре.

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

' запускается 5 раз
For i = 1 To 5
' запускается один раз для каждого элемента коллекции
For i = 1 To coll.Count
' запускается один раз для каждого элемента в arr
For i = LBound(arr) To coll.lbound(arr)
' запускается один раз для каждого значения от 1 до значения в lastRow
For i = 1 To lastRow
' запускается один раз для каждого элемента в коллекции
For Each s In coll

Цикл Do другой. Он работает:

  • В то время как условие верно
  • Пока условие не будет выполнено

Другими словами, количество циклов в большинстве случаев не имеет значения.

Итак, что такое условие и как мы их используем?

Условия

Условие — это утверждение, которое оценивается как истинное или ложное. Они в основном используются с операторами Loops и If. При создании условия вы используете такие знаки, как >, <, <>,> =, =.

Ниже приведены примеры условий

УсловиеИстина, когда…
x < 5x меньше 5
x <= 5x меньше либо равен 5
x > 5x больше 5
x >= 5x больше либо равен 5
x = 5x равен 5
x <> 5x не равен 5
x > 5 And x < 10x больше 5 И меньше 10
x = 2 Or x >10x равен 2 ИЛИ больше 10
Range(«A1») = «Иван»Ячейка A1 содержит текст «Иван»
Range(«A1») <> «Иван»Ячейка A1 не содержит текст «Иван»

Вы могли заметить x = 5 как условие. Его следует путать с х = 5, при использовании в качестве назначения.

Например

' означает: значение 6 будет храниться в х
x = 6
' означает: х равен 6?
If x = 6
' означает: х равен 6?
Do While x = 6

В следующей таблице показано, как «=» используется в условиях и назначениях.

Использование «=»ТипИмеется в виду
Loop Until x = 5Условиеx равен 5?
Do While x = 5Условиеx равен 5?
If x = 5 ThenУсловиеx равен 5?
For x = 1 To 5ПрисваиваниеУстановите значение x = 1, затем = 2 и т.д.
x = 5ПрисваиваниеУстановите значение x=5
b = 6 = 5Присваивание и
условие
Присвойте b
результату условия
6 = 5
x = MyFunc(5,6)ПрисваиваниеПрисвойте х
значение,
возвращаемое
функцией

Формат цикла Do

Цикл Do можно использовать четырьмя способами, и это часто вызывает путаницу. Однако в каждом из этих четырех способов есть только небольшая разница.

Do всегда в начале первой строки, а Loop всегда в конце последней строки.

Do 
Loop

Мы можем добавить условие после любой строки.

Do [условие]
Loop
Do 
Loop [условие]

Условию предшествует While или Until, которое дает нам эти четыре возможности

Do While [условие]
Loop
Do Until [условие]
Loop
Do 
Loop While [условие]
Do 
Loop Until [условие]

Давайте посмотрим на некоторые примеры, чтобы прояснить это.

Примеры цикла Do

Представьте, что вы хотите, чтобы пользователь ввел список элементов. Каждый раз, когда пользователь вводит элемент, вы печатаете его в «Immediate Window». Когда пользователь вводит пустую строку, вы хотите, чтобы приложение закрывалось.

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

Следующий код показывает это

 Dim sCommand As String
    Do
        ' Получить пользовательский ввод
        sCommand = InputBox("Пожалуйста, введите элемент")
        ' Печать в Immediate Window (Ctrl + G для просмотра)
        Debug.Print sCommand
    Loop While sCommand <> ""

Код входит в цикл и продолжается до тех пор, пока не достигнет строки «Loop While». На этом этапе он проверяет, оценивается ли условие как истинное или ложное.

Если условие оценивается как ложное, то код выходит из цикла и продолжается.
Если условие оценивается как истинное, то код возвращается к строке Do и снова проходит через цикл.
Разница между наличием условия на линии Do и на линии Loop очень проста.

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

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

Sub GetInput()
    Dim sCommand As String
    ' Условие в начале
    Do While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop
    ' Условие в конце
    Do
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Loop While sCommand <> "н"
End Sub

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

Однако, если мы установим для sCommand значение «н» до запуска цикла «Do While», код не войдет в цикл.

Sub GetInput2()
    Dim sCommand As String
    sCommand = "н"
    ' Цикл не будет работать, поскольку команда "н"
    Do Whilel sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop
    ' Цикл все равно будет запущен хотя бы один раз
    Do
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Loop While sCommand <> "н"
End Sub

Второй цикл в вышеприведенном примере (то есть Loop While) всегда будет запускаться хотя бы один раз.

While против Until

При использовании Do Loop условию должно предшествовать Until или While.

Until и While, по сути, противоположны друг другу. Они используются в VBA аналогично тому, как они используются в английском языке.

Например:

  • Оставьте одежду, пока не пойдет дождь
  • Оставь одежду, пока не идет дождь

Другой пример:

  • Оставайся в постели, пока не станет светло
  • Оставайся в постели, пока темно

Еще один пример:

  • повторять, пока число не станет больше или равно десяти
  • повторить пока счет меньше десяти

Как видите, использование Until и While — это просто противоположный способ написания одного и того же условия.

Примеры Until и While

Следующий код показывает циклы «While» и «Until» рядом. Как видите, единственная разница в том, что условие полностью изменено.

Примечание: знаки <> означают «не равно».

Sub GetInput()
    Dim sCommand As String
    ' Условие в начале
    Do Until sCommand = "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop
    Do While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop
    ' Условие в конце
    Do
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Loop Until sCommand = "н"
    Do
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Loop While sCommand <> "н"
End Sub
  • Первый цикл: запускается только в том случае, если sCommand не равен ‘н’.
  • Второй цикл: запускается только в том случае, если sCommand не равен ‘н’.
  • Третий цикл: будет запущен хотя бы один раз перед проверкой sCommand.
  • Четвертый цикл: будет запущен хотя бы один раз перед проверкой sCommand.

Пример: проверка объектов

Примером использования Until и While является проверка объектов. Когда объект не был назначен, он имеет значение Nothing.

Поэтому, когда мы объявляем переменную книги в следующем примере, она имеет значение Nothing, пока мы не назначим ее Workbook.

 Dim wrk As Workbook

Противоположностью Nothing не является Nothing, что может сбить с толку.

Представьте, что у нас есть две функции: GetFirstWorkbook и GetNextWorkbook, которые возвращают некоторые объекты книги. Код будет печатать имя рабочей книги до тех пор, пока функции больше не вернут действительную рабочую книгу.

Вы можете увидеть пример кода здесь:

Dim wrk As Workbook
    Set wrk = GetFirstWorkbook()
    Do Until wrk Is Nothing
        Debug. Print wrk.Name
        Set wrk = GetNextWorkbook()
    Loop

Написание этого кода с использованием Do While было бы более запутанным, так как условие Not Is Nothing

Dim wrk As Workbook
    Set wrk = GetFirstWorkbook()
    Do While Not wrk Is Nothing
        Debug.Print wrk.Name
        Set wrk = GetNextWorkbook()
    Loop

Это делает код более понятным, и наличие четких условий — всегда хорошо. Честно говоря, разница маленькая, и выбор между «While» и «Until» действительно сводится к личному выбору.

Цикл Exit Do

Мы можем выйти из любого цикла Do с помощью оператора Exit Do.

Следующий код показывает пример использования Exit Do

Do While i < 1000
     If Cells(i,1) = "Найдено" Then 
         Exit Do
     End If
     i = i + 1
Loop 

В этом случае мы выходим из цикла Do Loop, если ячейка содержит текст «Найдено».

While Wend

Этот цикл в VBA, чтобы сделать его совместимым со старым кодом. Microsoft рекомендует использовать циклы Do, поскольку они более структурированы.

Из MSDN: «Оператор Do… Loop обеспечивает более структурированный и гибкий способ выполнения циклов».

Формат цикла VBA While Wend

Цикл VBA While имеет следующий формат:

While <Условие>
Wend

While Wend против Do

Разница между циклами VBA While и VBA Do заключается в следующем:

  1. While может иметь условие только в начале цикла.
  2. While не имеет версии Until.
  3. Не существует оператора для выхода из цикла While, как Exit For или Exit Do.

Условие для цикла VBA While такое же, как и для цикла VBA Do While. Два цикла в приведенном ниже коде работают точно так же.

Sub GetInput()
    Dim sCommand As String
    Do While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop
    While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Wend
End Sub

Бесконечный цикл

Даже если вы никогда не писали код в своей жизни, я уверен, что вы слышали фразу «Бесконечный цикл». Это цикл, в котором условие никогда не будет выполнено. Обычно это происходит, когда вы забыли обновить счетчик.

Следующий код показывает бесконечный цикл

Dim cnt As Long
    cnt = 1
    'это бесконечный цикл
    Do While cnt <> 5
    Loop

В этом примере cnt установлен в 1, но он никогда не обновляется. Поэтому условие никогда не будет выполнено — cnt всегда будет меньше 5.

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

Dim cnt As Long
    cnt = 1
    Do While cnt <> 5
        cnt = cnt + 1
    Loop

Как вы можете видеть, использование For Loop безопаснее для подсчета, поскольку оно автоматически обновляет счет в цикле. Ниже приведен тот же цикл с использованием For.

Dim i As Long
    For i = 1 To 4
    Next i

Это явно лучший способ сделать это. Цикл For устанавливает начальное значение, условие и счет в одну строку.

Конечно, можно использовать бесконечный цикл, используя For — это потребует немного больше усилий 🙂

 Dim i As Long
    ' Бесконечный цикл
    For i = 1 To 4
        ' i никогда не достигнет 4
        i = 1
    Next i

Работа с бесконечным циклом

Когда у вас бесконечный цикл — VBA не выдаст ошибку. Ваш код будет продолжать работать, а редактор Visual Basic не будет отвечать.

Раньше вы могли выйти из цикла, просто нажав Ctrl и Break. В настоящее время разные ноутбуки используют разные комбинации клавиш. Полезно знать, как это настроено в вашем ноутбуке, чтобы в случае возникновения бесконечного цикла вы могли легко остановить код.

Вы также можете выйти из цикла, убив процесс. Нажмите Ctrl + Shift + Esc. На вкладке Процессы найдите Excel / Microsoft Excel. Щелкните правой кнопкой мыши по этому и выберите «Завершить процесс». Это закроет Excel, и вы можете потерять часть работы — так что гораздо лучше использовать Ctrl + Break или его эквивалент.

Использование функций Worksheet вместо циклов

Иногда вы можете использовать функцию листа вместо цикла.

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

Использовать функции рабочего листа очень просто. Ниже приведен пример использования Sum и Count.

Sub WorksheetFunctions()
    Debug.Print WorksheetFunction.Sum(Range("A1:A10"))
    Debug.Print WorksheetFunction.Count(Range("A1:A10"))
End Sub

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

Sub SumWithLoop()
    Dim total As Long, count As Long
    Dim rg As Range
    For Each rg In Range("A1:A10")
        ' Total
        total = total + rg
        ' Count
        If rg <> "" Then
            count = count + 1
        End If
    Next rg
    Debug.Print total
    Debug.Print count
End Sub

Резюме

Цикл Do While

  • Цикл Do можно использовать 4 способами.
  • Его можно использовать в начале или в конце, Do While .. Loop, Do … Loop While
  • Может использоваться с Until в начале или в конце, Do Until .. Loop, Do … Loop Until
  • While и Until используют противоположные условия друг к другу.
  • Бесконечный цикл происходит, если ваше условие выхода никогда не будет выполнено.
  • Иногда использование функции рабочего листа более эффективно, чем использование цикла.

Цикл While Wend

  • Цикл Wend Wend устарел, и вы можете вместо этого использовать цикл Do.

Использование Do… Операторы цикла (VBA)





Twitter




LinkedIn




Facebook




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










  • Статья

  • Чтение занимает 2 мин

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

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

В следующей ChkFirstWhile процедуре необходимо проверить условие перед вводом цикла. Если myNum задано значение 9, а не 20, операторы внутри цикла никогда не будут выполняться. В процедуре ChkLastWhile инструкции в цикле выполняются только один раз, прежде чем условие станет False.

Sub ChkFirstWhile() 
    counter = 0 
    myNum = 20 
    Do While myNum > 10 
        myNum = myNum - 1 
        counter = counter + 1 
    Loop 
    MsgBox "The loop made " & counter & " repetitions. " 
End Sub 
 
Sub ChkLastWhile() 
    counter = 0 
    myNum = 9 
    Do 
        myNum = myNum - 1 
        counter = counter + 1 
    Loop While myNum > 10 
    MsgBox "The loop made " & counter & " repetitions." 
End Sub

Существует два способа использования ключевого слова Until для проверки условия в операторе Do…Loop. Вы можете проверить условие перед вводом цикла (как показано в ChkFirstUntil процедуре) или проверить его после выполнения цикла хотя бы один раз (как показано в процедуре ChkLastUntil ). Повторение циклов продолжается, пока сохраняется условие False.

Sub ChkFirstUntil() 
    counter = 0 
    myNum = 20 
    Do Until myNum = 10 
        myNum = myNum - 1 
        counter = counter + 1 
    Loop 
    MsgBox "The loop made " & counter & " repetitions." 
End Sub 
 
Sub ChkLastUntil() 
    counter = 0 
    myNum = 1 
    Do 
        myNum = myNum + 1 
        counter = counter + 1 
    Loop Until myNum = 10 
    MsgBox "The loop made " & counter & " repetitions. " 
End Sub

Вы можете выйти из do… Выполните цикл с помощью инструкции Exit Do . Например, чтобы выйти из бесконечного цикла, используйте инструкцию Exit Do в блоке инструкции True либо if… Затем… Оператор Else или оператор Select Case . Если условие будет False, цикл запустится обычным образом.

В следующем примере myNum присваивается значение, которое создает бесконечный цикл. Оператор If…Then…Else проверяет это условие, а затем выходит из бесконечного цикла.

Sub ExitExample() 
    counter = 0 
    myNum = 9 
    Do Until myNum = 10 
        myNum = myNum - 1 
        counter = counter + 1 
        If myNum < 10 Then Exit Do 
    Loop 
    MsgBox "The loop made " & counter & " repetitions." 
End Sub

Примечание.

Чтобы остановить бесконечный цикл, нажмите клавиши ESC или CTRL+BREAK.

См.

также

  • Темы по основам Visual Basic

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.






Цикл For в Excel VBA

Одиночный цикл | Двойная петля | тройная петля | Do While Loop

Цикл — один из самых мощных приемов программирования. Цикл в Excel VBA позволяет перебирать диапазон ячеек всего несколькими строками кода.

Одиночный цикл

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

Поместите командную кнопку на рабочий лист и добавьте следующие строки кода:

Размер i как целое число

Для i = от 1 до 6
Ячейки (я, 1). Значение = 100
Next i

Результат при нажатии командной кнопки на листе:

Объяснение: Строки кода между For и Next будут выполнены шесть раз. Для i = 1 Excel VBA вводит значение 100 в ячейку на пересечении строки 1 и столбца 1. Когда Excel VBA достигает Next i, он увеличивает i на 1 и переходит обратно к оператору For. Для i = 2 Excel VBA вводит значение 100 в ячейку на пересечении строки 2 и столбца 1 и т. д.

Примечание: рекомендуется всегда делать отступ (табуляцию) в коде между словами For и Next. Это облегчает чтение вашего кода.

Двойной цикл

Двойной цикл можно использовать для прохода по двумерному диапазону ячеек.

Поместите командную кнопку на рабочий лист и добавьте следующие строки кода:

Dim i As Integer, j As Integer

Для i = от 1 до 6
Для j = от 1 до 2
Ячейки (i, j). Значение = 100
Следующий j
Далее i

Результат при нажатии командной кнопки на листе:

Объяснение: Для i = 1 и j = 1 Excel VBA вводит значение 100 в ячейку на пересечении строки 1 и столбца 1. Когда Excel VBA достигает Next j, увеличивает j на 1 и возвращается к оператору For j. Для i = 1 и j = 2 Excel VBA вводит значение 100 в ячейку на пересечении строки 1 и столбца 2. Затем Excel VBA игнорирует Next j, поскольку j выполняется только от 1 до 2. Когда Excel VBA достигает Next i , он увеличивает i на 1 и возвращается к оператору For i. Для i = 2 и j = 1 Excel VBA вводит значение 100 в ячейку на пересечении строки 2 и столбца 1 и т. д.

Тройной цикл

Тройной цикл можно использовать для циклического перебора двумерных диапазонов на нескольких листах Excel.

Поместите командную кнопку на рабочий лист и добавьте следующие строки кода:

Dim c как целое число, i как целое число, j как целое число

Для c = от 1 до 3
Для i = от 1 до 6
Для j = от 1 до 2
Рабочие листы (c). Ячейки (i, j). Значение = 100
Следующий j
Далее я
Далее с

Объяснение: Единственное изменение по сравнению с кодом для двойного цикла состоит в том, что мы добавили еще один цикл и добавили Рабочие листы (c). перед Cells, чтобы получить двумерный диапазон на первом листе для c = 1, втором листе для c = 2 и третьем листе для c = 3. Загрузите файл Excel, чтобы увидеть этот результат.

Цикл Do While

Помимо цикла For Next, в Excel VBA есть и другие циклы. Например, цикл Do While. Код, помещенный между Do While и Loop, будет повторяться до тех пор, пока часть после Do While является истинной.

1. Поместите командную кнопку на рабочий лист и добавьте следующие строки кода:

Dim i As Integer
i = 1

Делать, пока i < 6
Ячейки (я, 1). Значение = 20
я = я + 1
Цикл

Результат при нажатии командной кнопки на листе:

Объяснение: пока i меньше 6, Excel VBA вводит значение 20 в ячейку на пересечении строки i и столбца 1 и увеличивает i на 1. В Excel VBA (и в других языках программирования) символ ‘=’ означает становится. Это не значит равный. Таким образом, i = i + 1 означает, что i становится i + 1. Другими словами: возьмите текущее значение i и добавьте к нему 1. Например, если i = 1, i становится 1 + 1 = 2. В результате значение 20 будет помещено в столбец A пять раз (а не шесть, поскольку Excel VBA останавливается, когда i становится равным 6).

2. Введите несколько чисел в столбец A.

3. Поместите командную кнопку на лист и добавьте следующие строки кода:

Dim i As Integer
i = 1

Делать, пока ячейки (i, 1).Value <> «»
Ячейки(i, 2).Значение = Ячейки(i, 1).Значение + 10
я = я + 1
Цикл

Результат при нажатии кнопки команды на листе:

Объяснение: пока Cells(i, 1).Value не пусто (<> означает не равно), Excel VBA вводит значение в ячейка на пересечении строки i и столбца 2, что на 10 выше, чем значение в ячейке на пересечении строки i и столбца 1. Excel VBA останавливается, когда i равно 7, потому что Cells(7, 1).Value пусто. Это отличный способ просмотреть любое количество строк на листе.

VBA For Loop в Excel: полное руководство [шаг за шагом]

Если вы хотите автоматизировать свои электронные таблицы Excel, макросы — хороший способ сделать это. Макросы — это автоматизированные сценарии, обычно написанные с использованием Visual Basic для приложений (VBA), которые помогают выполнять определенные действия в Excel, например автоматизировать нажатие кнопки или выполнять вычисления.

VBA — это полезный язык программирования для начинающих аналитиков данных, поскольку он расширяет функциональные возможности Excel, упрощая автоматическое (и многократное) выполнение определенных задач с помощью настраиваемых сценариев макросов. Например, если вам нужен макрос, который повторяет действие определенное количество раз, вы можете использовать VBA для цикла .

Подобные циклы не уникальны для VBA — на самом деле, они являются общей функцией большинства языков программирования, позволяя программе или сценарию работать непрерывно в последовательности с начальной и конечной точкой. Для аналитиков данных Excel цикл VBA For Loop может позволить вам перебирать ячейки или выполнять определенное количество действий, как только будут выполнены критерии для этого.

Это может произойти после вставки определенного вычисления или достижения значения, или когда вы выполняете определенное действие в самой электронной таблице (например, нажимаете пользовательскую вставленную кнопку). Использование VBA For Loop необходимо для создания макросов, которые будут выполняться непрерывно, когда вы работаете с электронной таблицей.

Если вы новичок в программировании на VBA и хотите создать базовый (или даже расширенный) макрос с помощью VBA For Loop, это руководство должно вам помочь. В этой статье мы объясним:

  1. Что такое циклы VBA For в Microsoft Excel и для чего они используются?
  2. Как VBA For Loops работает в Excel?
  3. На что следует обратить внимание перед использованием цикла VBA For в Excel
  4. Как добавить цикл VBA For в Excel с помощью редактора Visual Basic

Как работают циклы VBA For в Excel? Давайте познакомимся с основами.

1. Что такое циклы VBA For в Microsoft Excel и для чего они используются?

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

Циклы — это гибкие инструменты, дающие возможность повторять определенные действия (например, изменение значений ячеек) заданное количество раз. Цикл также можно комбинировать с другими операторами, такими как For и If, которые помогают определить, как часто и как долго должен выполняться сценарий.

В VBA цикл For повторяет действие (или набор действий) заданное количество раз в последовательности. Например, если у вас есть макрос (написанный на VBA), который вставляет значения в столбец, вы можете использовать для этого цикл For Loop, последовательно заполняя каждую ячейку (например, A1, A2, A3 и т. д.), пока не будет получено конечное значение. достиг.

Например, ранее показанный фрагмент кода VBA демонстрирует такое действие. В этом примере макрос VBA предназначен для вставки значений в ячейки столбца A от 1 до 10 и увеличения с одноразрядным приращением. При достижении 10 скрипт останавливается.

Это базовый пример, но циклы For Loops достаточно мощны, чтобы многократно выполнять практически любое действие в Excel. Хотя это руководство не является полным учебным пособием по VBA (и предполагается, что у вас уже есть определенный базовый опыт работы с VBA), оно должно позволить вам создавать базовые циклы VBA, используя For для последовательного повторения действия.

2. Как VBA For Loops работает в Excel?

Предположим, у вас уже есть представление о том, как должен работать ваш макрос VBA. Внедрение цикла For в микс позволяет вам настроить свой код (или часть вашего кода) на повторение себя определенное количество раз.

Поясним процесс на простом для понимания примере. Поскольку циклы VBA For Loops полезны для конечных повторяющихся действий, давайте предположим, что вы хотите, чтобы всплывающее окно появлялось при нажатии кнопки (с именем класса Button ).

Нажатие кнопки приводит к тому, что всплывающее окно появляется определенное количество раз подряд, используя переменную varButton в качестве конечного числа (в данном случае 10 ). В этом всплывающем окне отображается текущая переменная, начиная с нуля. Затем он повторяет это 9несколько раз, пока не будет достигнута переменная varButton ( 10 ).

Действие нажатия кнопки запускает цикл. Поскольку у теста есть начальная и конечная переменные, цикл имеет конечное число запусков, прежде чем он завершится. По умолчанию значения увеличиваются на 1 (начиная с 0, 1, 2 и т. д.), но это можно изменить, добавив значение шага . Например, если изменить это значение на 5 , появятся только три всплывающих окна.

Как только достигается конечное значение, цикл завершается, и макрос останавливается. Однако вы можете добавить дополнительные действия для выполнения на этом этапе, например, изменить значение другой ячейки или создать другое всплывающее сообщение. Вы можете вложить цикл For в другие логические тесты, такие как оператор Do While или If.

Однако этот пример содержит все типичные критерии, необходимые для завершения цикла For с использованием VBA. Код определяет, сколько раз действие будет выполнено в последовательности ( varButton ) и значение приращения, используемое для повторения последовательности ( Шаг ).

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

3. На что следует обратить внимание перед использованием цикла VBA For в Excel

Цикл VBA For Loop — это гибкий и широкомасштабный метод, который позволяет вашему коду выполнять действие последовательно и останавливаться только при выполнении определенных условий. которые встретились. Чтобы помочь вам создать макрос такого типа в Excel, вам необходимо принять во внимание несколько советов. К ним относятся:

  • Если вы хотите, чтобы цикл For заканчивался до того, как будет достигнуто конечное значение, вам нужно добавить Exit For заявление к вашему коду. Это выходит из цикла и переходит к следующей строке кода вне цикла (если ваш код продолжается). Например, вы можете остановить цикл, нажав кнопку.
  • Цикл VBA For Loop можно использовать для последовательного циклического перебора заданного количества числовых значений базовым способом с помощью цикла For Next , но вы также можете циклически перемещаться по более сложным объектам (например, рабочим книгам в электронной таблице) в последовательность с использованием более сложного VBA для каждого Петля.
  • VBA For Loops может быть вложен с другими логическими операторами, такими как If или Do While . Это позволяет интегрировать более сложные процессы принятия решений в ваш код.
  • Цикл VBA For Loop будет повторяться в последовательности, но, изменив значение Step , вы можете изменить величину увеличения счетчика цикла во время каждой итерации. Например, если вы хотите, чтобы ваш цикл продвигался вперед в последовательности, которая увеличивает значение на 2, вам нужно использовать Значение шага , равное 2. Если вы не укажете значение шага , счетчик циклов будет увеличиваться с шагом 1 .
  • Если ваш цикл VBA For Loop не может быть выполнен или если в вашем коде есть ошибки, VBA выйдет в режим отладки с ошибкой. Вам нужно будет устранить неполадки в коде, чтобы решить эту проблему во встроенном редакторе VBA Excel.

Хотя эти примеры важны, перед написанием кода следует также учитывать любые известные ограничения VBA, не перечисленные здесь (например, отсутствие функции отмены при использовании VBA).

4. Как добавить циклы VBA For в Excel с помощью редактора Visual Basic

Вы можете создавать, тестировать и запускать цикл VBA For в Excel с помощью редактора Visual Basic. Это встроенный в Excel редактор VBA, который позволяет создавать собственные макросы с помощью VBA или редактировать существующие макросы, созданные с помощью инструмента записи макросов.

Чтобы начать создание макроса VBA с помощью цикла For в редакторе Visual Basic, выполните следующие действия:

Шаг 1. Откройте редактор VBA

Для начала вам нужно открыть редактор Visual Basic в вашем Excel рабочая тетрадь.

Вы можете сделать это, нажав клавиши Alt + F11 на клавиатуре (или Option + F11 на Mac). Если вы уже включили вкладку «Разработчик» на ленточной панели в меню настроек Excel, вы также можете нажать Developer > Visual Basic , чтобы вместо этого открыть редактор.

Шаг 2: Создайте новый модуль VBA

В этот момент редактор VBA откроется в новом окне. Следующим шагом будет вставка цикла VBA For Loop (и дополнительного кода) в качестве нового VBA модуль . Модули используются для организации кода VBA в группы.

Для этого щелкните правой кнопкой мыши книгу, указанную в древовидном меню слева. В раскрывающемся меню выберите Вставить > Модуль .

Шаг 3: Введите код VBA For Loop

Новое окно для вашего кода появится справа. Здесь вы можете ввести или вставить код VBA, содержащий ваш цикл For. Например, следующий код вставит последовательные значения в ячейки с A1 по A20 на любом активном листе:

Sub Loopval ()

DIM I AS INTEGER

для I = 1-10

Диапазон («A» и I). Value = I

Следующий I

End Sub

Шаг 4. Переименуйте свой модуль и протестируйте свой код

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

Когда вы будете готовы протестировать свой код, нажмите кнопку Run Sub/User Form . Это запустит код на вашем активном листе, что позволит вам увидеть макрос в действии.

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

Шаг 5. Сохраните книгу

Когда ваш макрос VBA готов, вам нужно сохранить книгу Excel как книгу с поддержкой макросов в формате XLSM . Для этого нажмите Ctrl + S на клавиатуре или нажмите Файл > Сохранить как .

Шаг 6. Запустите код VBA

Ваш макрос (содержащий цикл VBA For Loop) готов к запуску после сохранения рабочей книги.