Циклы Excel VBA
Циклы можно рассматривать как лучший функционирующий компонент VBA, а также как сердце макросов. Они обычно помогают вам сократить количество строк в вашем коде и выполнять работу за считанные минуты, которые могут занять у человека часы.
В повседневной жизни программист сталкивается с такими случаями, когда ему нужно снова и снова запускать один и тот же набор кода. Это называется зацикливанием. Очевидно, что каждый раз при запуске одного и того же кода результат будет примерно одинаковым с небольшим изменением переменной. Циклы имеют большой набор преимуществ, но самое главное это автоматизация. Это помогает автоматизировать вещи.
Если вы ранее не использовали VBA Script, вы можете просто открыть книгу Excel и нажать Alt + F11 . Это откроет проект VBA.
Давайте углубимся внутрь.
Предположим, мы хотим напечатать от 1 до 10 номеров за один снимок. Мы можем сделать это с помощью следующего кода.
Код:
Sub loop1 () Debug.Print 1 Debug.Print 2 Debug.Print 3 Debug.Print 4 Debug.Print 5 Debug.Print 6 Debug.Print 7 Debug.Print 8 Debug.Print 9 Debug.Print 10 End Sub
Если вы можете быстро пройти через код, я добавил Debug.Print один за другим, чтобы печатать числа от 1 до 10. После выполнения кода мы можем увидеть вывод в Immediate Window. Чтобы открыть Immediate Window, нажмите Ctrl + G в любом месте Excel.
Запустите код, используя клавишу F5 или вручную, как показано на скриншоте ниже. Итак, давайте проверим вывод для этого кода.
Типы циклов VBA в Excel
Будучи программистом, вы никогда не будете стремиться писать повторяющиеся строки, которые приведут к тому же результату. Вы хотели бы автоматизировать это. Поэтому мы увидим различные циклы Excel VBA и их использование на нескольких примерах.
Тип № 1 - VBA для следующего цикла
Для следующего цикла VBA позволяет нам проходить через диапазон ячеек и выполнять ту же задачу для каждой ячейки, указанной в цикле. Начальный номер и конечный номер должны быть указаны здесь.
код:
Sub loop1 () Для i = 1-10 ячеек (i, 1). Значение = i Next i End Sub
Этот код дает точно такой же вывод, как и предыдущий. Однако самое примечательное в этом коде - это сокращение количества строк. Мы сократили 12-строчный код до простого кода с 5 строками.
В этом коде loop1 - это имя макроса. Цикл for начинается с i = 1, он печатает значение i (т. Е. 1) в ячейке Excel, а затем Next снова возвращается к началу цикла for и заставляет i = 2 печатать значение i (т. Е. 2). в следующей ячейке и так далее до тех пор, пока код не достигнет своего последнего значения, т. е. 10. Как только код достигнет последнего значения i (10), код завершается сам из-за отсутствия любого целочисленного значения выше 10.
Запустите код, используя клавишу F5 или вручную. Таким образом, вы можете увидеть результат, как показано ниже.
Тип № 2 - VBA для цикла с шагом вперед
Как вы видели в предыдущем примере цикла, у меня было увеличение на 1 шаг. По умолчанию значение шага считается 1 в VBA. Однако можно ли сделать собственный шаг? Предположим, вы хотите видеть только четные числа от 1 до 20. Как это можно сделать?
Как подсказывает общая математика, числа, которые находятся на расстоянии 2 друг от друга (начиная с первого четного числа 2), считаются четными числами, верно?
Мы будем применять ту же логику. Смотрите ниже код для вашей справки.
Код:
Sub ForwardStep () для i = 2–20 ячеек Step 2 (i, 1) .Value = i Next i End Sub
Для значений, начинающихся с 2, этот цикл позволяет печатать 2, 4, 6, 8… 20 в последующих ячейках Excel. Шаг 2 явно дал, чтобы, начиная с номера 2, код переходил к следующему числу с шагом 2 (т.е. будет напечатано 4) и так далее. Этот процесс будет продолжаться до 20 в клетке. Как только в ячейке появляется 20, цикл автоматически завершается.
Запустите код, используя клавишу F5 или вручную. Таким образом, вы можете увидеть результат, как показано ниже.
Тип № 3 - VBA для цикла с шагом назад
Так же, как для цикла for с шагом вперед, мы можем использовать цикл for с шагом назад. Например, что если мы установим наш шаг назад равным -2 и запустим цикл for со значениями от 20 до 2?
Посмотрим, как это работает.
код:
Sub BackwardStep () для i = 20 до 2 Step -2 Debug.Print i Next i End Sub
После запуска кода мы можем увидеть вывод в Immediate Window. Чтобы открыть Immediate Window, нажмите Ctrl + G в любом месте Excel.
Поскольку мы указали начальную точку цикла как 20 и конечную точку как 2 с шагом -2, цикл начинается с 20, а на шаге -2 он переходит к следующему числу, равному -18, и так далее. Как только цикл достигает значения 2, он автоматически завершается и последнее значение будет напечатано как 2.
Тип № 4 - VBA, вложенный в цикл
Мы также можем вкладывать цикл For. Однако не рекомендуется выполнять вложение одного и того же цикла более трех раз в коде (это можно рассматривать как ошибку в логике).
Пожалуйста, смотрите код ниже для вложенного цикла for.
Код:
Sub NestedFor () Для i = 1–10 Для j = 1–2 ячеек (i, j). Значение = i * j Далее j Далее i End Sub
В этом примере, при i = 1 и j = 1, макрос помещает значение i * j (1 * 1) в пересечение строки i = 1 и столбца j = 1 (т.е. ячейки A1) и переходит к следующему значению j (2), сохраняя i = 1. На пересечении строки i = 1 и столбца j = 2 (т. е. ячейки B1) макрос вводит значение I * j (1 * 2). Цикл игнорирует следующее значение j, поскольку j изменяется только от 1 до 2 и переходит к следующему значению i.
Для i = 2 и j = 1 макрос вводит значение i * j (2 * 1) в пересечение 2- й строки и 1- го столбца (то есть ячейки A2) и продолжается. До диапазона я и j.
Запустите код, используя клавишу F5 или вручную, как показано на скриншоте ниже. Таким образом, вы можете увидеть результат, как показано ниже.
Тип № 5 - VBA Do While Loop
Цикл Do While - один из самых интересных циклов в VBA. Это позволяет вам проверить условие и записать вывод (DO), когда определенное условие или набор условий соблюдены (или условие / с ИСТИНА / ИСТИНА).
Смотрите код ниже:
Код:
Sub do_ whileloop () Dim i As Integer i = 1 Do Пока i <= 10 ячеек (i, 1). Значение = i * ii = i + 1 Loop End Sub
Этот цикл работает следующим образом:
Для значений i от 1 (изначально i = 1) до 10 он вычисляет i * i (то есть квадратное значение для каждого целого значения i) и вводит его в ячейки 1–10 соответственно. Выходные данные - не что иное, как квадратные значения целых чисел от 1 до 10. Пожалуйста, более внимательно посмотрите на Loop под этим кодом. Добавлять его обязательно, в противном случае система выдаст ошибку.
Запустите код, используя клавишу F5 или вручную. Таким образом, вы можете увидеть результат, как показано ниже.
Вот некоторые примеры циклов VBA, о которых я попытался позаботиться в этой статье. Надеюсь, он будет достаточно точным, чтобы прояснить некоторые понятия.
То, что нужно запомнить
- При использовании цикла for с обратным шагом, убедитесь, что ваш начальный номер должен быть больше, чем ваш конечный номер, и наоборот.
- В цикле Do, убедитесь, что вы используете цикл для закрытия do, прежде чем завершать весь код VBA. В противном случае система выдает ошибку компилятора с сообщением об ошибке «Без цикла».
Вы можете скачать этот шаблон VBA Loops Excel здесь - Шаблон VBA Loops Excel
Рекомендуемые статьи
Это руководство по циклам Excel VBA. Здесь мы обсудили типы циклов Excel VBA и их использование, а также некоторые практические примеры и загружаемый шаблон Excel. Вы также можете просмотреть наши другие предлагаемые статьи -
- Функция VBA в Excel
- VBA VLOOKUP Функция
- Сочетания клавиш Excel
- Excel Percentile Formula