Цикл в Excel
Обновлено: 20.11.2024
В этой статье мы узнаем о программировании циклов DO WHILE. Сначала мы узнаем, что такое циклы и зачем они нужны. Затем мы научимся использовать цикл DO WHILE LOOP.
Типы циклов VBA
Примечание. В Excel VBA есть два типа ЦИКЛОВ DO: DO WHILE и DO UNTIL. В этой статье мы сосредоточимся на цикле DO WHILE.
Рассмотрите следующий код:
Этот код используется для сложения чисел от 1 до 10. Затем результат сохраняется в переменной numbcount. Теперь это выглядит довольно легко и просто. А теперь предположим, что вместо первых десяти чисел вы хотите сложить числа от 1 до 1000, теперь вы собираетесь писать все числа, а затем складывать их? Конечно, вы можете, но это станет утомительным, верно. Так что же нам делать? На самом деле это просто, мы используем удобный инструмент программирования под названием «Цикл».
Цикл по мере звучания названий — это нечто, что продолжается до тех пор, пока вы не прикажете ему остановиться (это называется "условием"). Вы устанавливаете начальный номер для своего цикла, конечное условие и способ перехода от начального номера к конечному условию. В VBA существует четыре типа циклов: циклы For, циклы For Each, циклы Do и циклы While. Сейчас мы сосредоточимся на цикле DO WHILE.
Сначала рассмотрим синтаксис цикла DO WHILE LOOP:
Объяснение: Сначала вы объявляете цикл DO WHILE, написав "Do While", а затем квадратные скобки, в которых вы пишете условие. Это условие будет использовано для завершения цикла DO WHILE.
Вот пример для лучшего понимания синтаксиса:
Объяснение. Этот код увеличивает значение переменной с именем count на 1, а затем сохраняет значение в той же переменной count. Этот цикл будет продолжаться снова и снова, пока оператор условия не станет истинным, то есть до тех пор, пока значение count не станет меньше, чем равное 5. Теперь давайте посмотрим, как использовать цикл Do WHILE. Выполните следующие действия:
Лента
Перейдите на вкладку "Разработчик" и выберите "Просмотреть код"
Откроется новое окно (редактор Visual Basic) с диалоговым окном в центре. Вы напишете код в диалоговом окне.
Код
Напишите следующую строку кода в диалоговом окне
После написания кода закройте окно, щелкнув значок крестика (x) в верхней правой части экрана.
Объяснение: В этом коде мы объявили переменную counter с типом данных integer и присвоили ей значение 1. Мы использовали цикл DO WHILE с условием для подсчета от 1 до 4 и сохранения значения в ячейке D.
После написания этого кода закройте окно (визуальный базовый редактор), нажав правую верхнюю кнопку с крестиком.
Циклы — один из самых мощных приемов программирования. Цикл в Excel VBA позволяет перебирать диапазон ячеек всего несколькими строками кода.
Один цикл
Вы можете использовать один цикл для прохода по одномерному диапазону ячеек.
Поместите командную кнопку на лист и добавьте следующие строки кода:
Размер i как целое
Для i = от 1 до 6
Cells(i, 1).Value = 100
Следующий 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. Это облегчает чтение кода.
Двойной цикл
Двойной цикл можно использовать для прохода по двумерному диапазону ячеек.
Поместите командную кнопку на лист и добавьте следующие строки кода:
Размерьте i как целое число, j как целое число
Для i = от 1 до 6
Для j = от 1 до 2
Ячейки (i, j). Значение = 100
Следующий j
Следующий i
Результат при нажатии командной кнопки на листе:
Объяснение. Для i = 1 и j = 1 Excel VBA вводит значение 100 в ячейку на пересечении строки 1 и столбца 1. Когда Excel VBA достигает следующего j, он увеличивает j на 1 и переходит обратно к Для 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
Следующий i
Следующий c
Объяснение: Единственное изменение по сравнению с кодом для двойного цикла заключается в том, что мы добавили еще один цикл и добавили Рабочие листы (c). перед Cells, чтобы получить двумерный диапазон на первом листе для c = 1, втором листе для c = 2 и третьем листе для c = 3. Загрузите файл Excel, чтобы увидеть этот результат.
Выполнить цикл пока
Помимо цикла For Next в Excel VBA есть и другие циклы. Например, цикл Do While. Код, помещенный между Do While и Loop, будет повторяться до тех пор, пока часть после Do While имеет значение true.
<р>1. Поместите командную кнопку на лист и добавьте следующие строки кода:Размер i как целое
i = 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. Поместите командную кнопку на лист и добавьте следующие строки кода:
Размер i как целое
i = 1
Do While Cells(i, 1).Value <> ""
Cells(i, 2).Value = Cells(i, 1).Value + 10
i = i + 1 < br />Цикл
Результат при нажатии командной кнопки на листе:
Объяснение: пока Cells(i, 1).Value не пусто (<> означает не равно), Excel VBA вводит значение в ячейку на пересечении строки i и столбца 2, то есть на 10 выше чем значение в ячейке на пересечении строки i и столбца 1. Excel VBA останавливается, когда i равно 7, потому что Cells(7, 1).Value пусто. Это отличный способ просмотреть любое количество строк на листе.
Цикл выполнения VBA — это подраздел внутри макроса Макросы VBA Настройка макросов в Excel VBA довольно проста. Структура макросов Excel VBA включает начало строки sub() перед началом кода макроса. это будет «зацикливаться» или повторяться до тех пор, пока не будут выполнены некоторые определенные критерии. Кодер может настроить цикл на повторение заданного количества раз, пока определенная переменная не превысит пороговое значение или пока не будет активирована определенная ячейка. На самом деле, циклы достаточно надежны в том смысле, что пользователь может проявить творческий подход к критериям завершения цикла, если он или она понимает, как работают циклы VBA. Это может оказаться очень полезным при создании финансовой модели Что такое финансовое моделирование Финансовое моделирование выполняется в Excel для прогнозирования финансовых показателей компании. Обзор того, что такое финансовое моделирование, как и зачем строить модель. более эффективно.
Инструкция Do Loop будет иметь начальную и конечную инструкции, а код для выполнения содержится в этих двух инструкциях. Это похоже на структуру макроса, где весь код макроса содержится внутри оператора Sub, который запускает макрос, и оператора End Sub, который его завершает. Макросы могут содержать несколько отдельных циклов, а циклы могут бесконечно содержать циклы внутри себя.
Различные типы циклов
Существует несколько различных типов циклов, и каждый тип работает по-своему.
- Выполнить до цикла
- Выполнить цикл во время выполнения
- Цикл For VBA Цикл For В цикле For VBA процесс будет повторяться определенное количество раз, пока не будут соблюдены критерии. Циклы VBA For Loop менее динамичны, чем циклы Do.
Выполнить до цикла
Цикл «Выполнить до» будет повторяться до тех пор, пока критерий не станет истинным. Критерий вставляется сразу после оператора «делать до». Цикл заканчивается оператором «Loop». Простым примером этого цикла является увеличение счетчика до тех пор, пока он не достигнет указанного числа, как в примере ниже.
Уменьшить n как целое
N = 0
Выполнять до n = 10
n = n + 1
Цикл
В этом примере мы установили целочисленную переменную, известную как «n». Макрос изначально сохраняет значение 0 в n. Когда он входит в цикл «До тех пор», критерий n = 10 не соответствует действительности, поэтому выполняется процесс внутри цикла. Первая итерация добавляет 1 к n, превращая значение в 1. Поскольку n все еще не равно 10, процесс будет повторяться 10 раз, пока n не станет 10. Как только n = 10, макрос пройдет цикл и продолжит работу с оставшейся частью макрос.
Этот тип цикла с использованием целого числа удобен для запуска процесса заданное количество раз. Например, вы можете заполнить первые десять строк в столбце А текстом «Компания n». Делается это следующим образом:
Уменьшить n как целое
N = 0
Выполнять до n = 10
n = n + 1
Range("A" & n).Value = "Компания" & n
Цикл
Выполнение этого макроса заполнит ячейку A1 компанией 1, ячейку A2 — компанией 2 и так далее, пока ячейка A10 не будет заполнена компанией 10. В ячейке A10 будут выполнены условия выполнения до n = 10, и поэтому макрос завершит цикл и продолжит движение.
Выполнить цикл пока
В отличие от цикла "выполнить до" цикл "выполнить пока" будет выполнять цикл до тех пор, пока критерии не станут ложными. Другими словами, Do Loop будет выполняться до тех пор, пока выполняются критерии. Похоже, это полная противоположность циклу do until.
Если бы мы использовали тот же пример макроса, что и выше, но заменили бы do until на do while, макрос просто пропустил бы цикл. Это связано с тем, что n равно 0 в начале процесса, и цикл будет выполняться только при n = 10. Поскольку n может достичь только 10 в процессе цикла, оно никогда не может достичь 10, поэтому цикл будет пропущен.
Вместо этого, чтобы выполнить тот же процесс в цикле do while, мы должны использовать неравенство.
Уменьшить n как целое
N = 0
Делать пока n
n = n + 1
Range("A" & n).Value = "Компания" & n
Цикл
Обратите внимание, что в неравенстве используется 11 вместо 10. Это связано с тем, что макрос должен выполняться до тех пор, пока не достигнет компании 10. Если критерий цикла был установлен на n коэффициенты кредитного плеча Коэффициенты кредитного плеча Коэффициент кредитного плеча указывает уровень долга, понесенного компанией хозяйствующего субъекта по нескольким другим счетам в его балансе, отчете о прибылях и убытках или отчете о движении денежных средств. превышают определенные значения до запуска определенного макроса.
Нечисловые критерии в цикле выполнения
В цикле For описанный выше процесс можно упростить. Цикл for VBA Цикл For В цикле VBA For процесс будет повторяться определенное количество раз, пока не будут соблюдены критерии. Циклы VBA For Loops менее динамичны, чем циклы Do. имеет преимущество перед циклами do, поскольку автоматически создает переменную вместо n за один простой шаг. Однако циклы do имеют определенные преимущества по сравнению с циклами for.
Хотя циклы for обычно можно использовать только с числовыми переменными, циклы do могут иметь критерии, использующие другие типы данных, например строки и даты. Цикл do можно настроить так, чтобы он выполнялся только до тех пор, пока не поступят определенные данные. Например, возможно, пользователь хотел бы, чтобы макрос выполнялся только для 2017 года и не запускался по прошествии года. Этого можно добиться с помощью переменной даты и установки критерия «Действовать до [DateVariable] = 01.01.2018».
Возможно, вместо этого пользователю хотелось бы, чтобы макрос выполнялся только тогда, когда определенная ячейка пуста, и не запускался, когда эта ячейка заполнена. Этого можно добиться с помощью таких критериев, как «Действовать до диапазона» («A5»). Значение = «». «» означает пустую ячейку. Примечание: ячейка, содержащая пробел, может казаться пустой, но не считается пустой ячейкой VBA Excel VBA VBA означает Visual Basic для приложений. Excel VBA — это язык программирования Microsoft для Excel и всех других программ Microsoft Office, таких как Word и PowerPoint. Все программы пакета Office используют общий язык программирования. .
Дополнительные ресурсы
Спасибо, что прочитали это руководство CFI о том, как создать цикл выполнения в VBA. Эти дополнительные ресурсы CFI будут полезны для дальнейшего совершенствования ваших навыков:
Чтобы получить максимальную отдачу от Excel и VBA, вам нужно знать, как эффективно использовать циклы.
В VBA циклы позволяют просматривать набор объектов/значений и анализировать их один за другим. Вы также можете выполнять определенные задачи для каждого цикла.
Вот простой пример использования циклов VBA в Excel.
Предположим, у вас есть набор данных и вы хотите выделить все ячейки в четных строках. Вы можете использовать цикл VBA, чтобы просмотреть диапазон и проанализировать каждый номер строки ячейки. Если он получается четным, вы задаете ему цвет, иначе оставляете как есть.
Теперь это, конечно, очень просто зациклить в Excel VBA (и вы также можете сделать это с помощью условного форматирования).
В реальной жизни вы можете делать гораздо больше с помощью циклов VBA в Excel, которые могут помочь вам автоматизировать задачи.
Вот еще несколько практических примеров использования циклов VBA:
- Проходя по диапазону ячеек и анализируя каждую ячейку (выделяя ячейки с определенным текстом).
- Перебрать все рабочие листы и сделать что-то с каждым (например, защитить/снять защиту).
- Перебрать все открытые книги (и сохранить каждую книгу или закрыть все, кроме активной книги).
- Перебрать все символы в ячейке (и извлечь из строки числовую часть).
- Пройтись по всем значениям массива.
- Пройтись по всем диаграммам/объектам (и задать границу или изменить цвет фона).
Теперь, чтобы наилучшим образом использовать циклы в Excel VBA, вам нужно знать о различных существующих типах и правильном синтаксисе каждого из них.
В этом руководстве я покажу различные типы циклов Excel VBA и приведу несколько примеров для каждого цикла
Примечание. Это будет большое руководство, в котором я попытаюсь подробно описать каждый цикл VBA. Я рекомендую вам добавить эту страницу в закладки для дальнейшего использования.
Если вы заинтересованы в простом изучении VBA, ознакомьтесь с моим онлайн-обучением Excel VBA.
Это руководство охватывает:
Для следующего цикла
Цикл «Для следующего» позволяет пройти через блок кода указанное количество раз.
Например, если я попрошу вас сложить целые числа от 1 до 10 вручную, вы должны добавить первые два числа, затем добавить к результату третье число, затем добавить к результату четвертое число и так далее. .
Та же логика используется в цикле For Next в VBA.
Вы указываете, сколько раз вы хотите запустить цикл, а также указываете, что вы хотите, чтобы код делал каждый раз, когда цикл выполняется.
Ниже показан синтаксис цикла For Next:
В цикле For Next вы можете использовать счетчик (или любую переменную), которая будет использоваться для запуска цикла. Этот счетчик позволяет запустить этот цикл необходимое количество раз.
Например, если я хочу сложить первые 10 положительных целых чисел, значение счетчика будет от 1 до 10.
Давайте рассмотрим несколько примеров, чтобы лучше понять, как работает цикл For Next.
Пример 1. Сложение первых 10 положительных целых чисел
Ниже приведен код, который складывает первые 10 положительных целых чисел с помощью цикла For Next.
Затем появится окно сообщения, показывающее сумму этих чисел.
В этом коде значение Total устанавливается равным 0 перед переходом в цикл For Next.
После того, как он попадает в цикл, он сохраняет общее значение после каждого цикла. Таким образом, после первого цикла, когда счетчик равен 1, значение «Общее» становится равным 1, а после второго цикла оно становится равным 3 (1+2) и т. д.
И, наконец, когда цикл заканчивается, переменная Total содержит сумму первых 10 положительных целых чисел.
Затем MsgBox просто отображает результат в окне сообщения.
Пример 2. Сложение первых 5 четных положительных целых чисел
Чтобы суммировать первые пять четных положительных целых чисел (т. е. 2, 4, 6, 8 и 10), вам понадобится аналогичный код с условием, что учитываются только четные числа и игнорируются нечетные числа.
Вот код, который это сделает:
Обратите внимание, что мы начали значение счетчика с 2, а также использовали «Шаг 2».
При использовании «Шага 2» код сообщает, что значение «Счетчик» увеличивается на 2 при каждом запуске цикла.
Поэтому значение счетчика начинается с 2, а затем становится равным 4, 6, 8 и 10 по мере зацикливания.
ПРИМЕЧАНИЕ. Другой способ сделать это — запустить цикл от 1 до 10 и внутри цикла проверить, является ли число четным или нечетным. Однако использование Step в этом случае является более эффективным способом, так как не требует выполнения цикла 10 раз, а только 5 раз.
Значение шага также может быть отрицательным. В таком случае счетчик начинается с более высокого значения и продолжает уменьшаться на указанное значение шага.
Пример 3. Ввод серийного номера в выбранные ячейки
Вы также можете использовать цикл For Next для просмотра набора объектов (таких как ячейки, листы или книги),
Вот пример быстрого ввода серийных номеров во все выбранные ячейки.
Приведенный выше код сначала подсчитывает количество выбранных строк, а затем присваивает это значение переменной RowCount. Затем мы запускаем цикл от «1 до RowCount».
Также обратите внимание, что, поскольку выделение может состоять из любого количества строк, мы установили для переменной Rng значение Selection (со строкой «Set Rng = Selection»).Теперь мы можем использовать переменную Rng для ссылки на выделение в нашем коде.
Пример 4. Защита всех листов в активной книге
Вы можете использовать цикл "Для следующего", чтобы просмотреть все рабочие листы в активной книге и защитить (или снять защиту) каждый из рабочих листов.
Ниже приведен код, который это сделает:
Приведенный выше код подсчитывает количество листов с помощью ActiveWorkbook.Worksheets.Count. Это сообщает VBA, сколько раз необходимо запустить цикл.
В каждом случае он ссылается на I-ю книгу (используя Worksheets(i)) и защищает ее.
Этот же код можно использовать и для снятия защиты с листов. Просто измените строку Worksheets(i).Protect на Worksheets(i).UnProtect.
Вложенные циклы For Next
Вы можете использовать вложенные циклы "Для следующего" для более сложной автоматизации в Excel. Вложенный цикл For Next означает, что внутри цикла For Next есть цикл For Next.
Позвольте мне показать вам, как это использовать на примере.
Предположим, в моей системе открыто 5 книг, и я хочу защитить все рабочие листы во всех этих книгах.
Ниже приведен код, который это сделает:
Выше приведен вложенный цикл For Next, поскольку мы использовали один цикл For Next внутри другого.
Инструкции «EXIT For» в циклах For Next
Выражение «Exit For» позволяет полностью выйти из цикла «For Next».
Его можно использовать в тех случаях, когда вы хотите, чтобы цикл For Next завершался при выполнении определенного условия.
Давайте рассмотрим пример, когда у вас есть набор чисел в столбце А, и вы хотите выделить все отрицательные числа красным шрифтом. В этом случае нам нужно проанализировать каждую ячейку на предмет ее значения, а затем соответствующим образом изменить цвет шрифта.
Но чтобы сделать код более эффективным, мы можем сначала проверить, есть ли в списке отрицательные значения. Если нет отрицательных значений, мы можем использовать оператор Exit For, чтобы просто выйти из кода.
Ниже приведен код, который это делает:
Когда вы используете оператор Exit For во вложенном цикле For Next, он выходит из цикла, в котором он выполняется, и переходит к выполнению следующей строки кода после цикла For Next.
Например, в приведенном ниже коде оператор Exit For выведет вас из внутреннего цикла, но внешний цикл продолжит работать.
Выполнить цикл пока
Цикл Do While позволяет проверить условие и запустить цикл, пока это условие выполняется (или имеет значение TRUE).
В цикле Do While есть два типа синтаксиса.
Разница между ними заключается в том, что в первом случае сначала проверяется условие "Пока" перед выполнением любого блока кода, а во втором случае сначала выполняется блок кода, а затем проверяется условие "Пока".
Это означает, что если условие "Пока" имеет значение False в обоих случаях, код все равно будет выполняться по крайней мере один раз во втором случае (поскольку условие "Пока" проверяется после того, как код был выполнен один раз).
Теперь давайте рассмотрим несколько примеров использования циклов Do While в VBA.
Пример 1. Добавление первых 10 положительных целых чисел с помощью VBA
Предположим, вы хотите сложить первые десять положительных целых чисел, используя цикл Do While в VBA.
Для этого вы можете использовать цикл Do While, пока следующее число не станет меньше или равно 10. Как только число превысит 10, ваш цикл остановится.
Вот код VBA, который запустит этот цикл Do While и покажет результат в окне сообщения.
Приведенный выше цикл продолжает работать до тех пор, пока значение i не станет равным 11. Как только оно станет равным 11, цикл завершится (поскольку условие While становится ложным).
В цикле мы использовали переменную результата, которая содержит окончательное значение. После завершения цикла в окне сообщения отображается значение переменной «Результат».
Пример 2. Введите даты текущего месяца
Допустим, вы хотите ввести все даты текущего месяца в столбец листа.
Это можно сделать, используя следующий код цикла Do While:
Приведенный выше код вводит все даты в первый столбец рабочего листа (начиная с A1). Циклы продолжаются до тех пор, пока значение месяца переменной CMDate не совпадет со значением текущего месяца.
Выход из выполнения
Вы можете использовать оператор Exit Do, чтобы выйти из цикла. Как только код выполняет строку Exit Do, он выходит из цикла Do While и передает управление следующей строке сразу после цикла.
Например, если вы хотите ввести только первые 10 дат, вы можете выйти из цикла, как только будут введены первые 10 дат.
Приведенный ниже код сделает это:
В приведенном выше коде оператор IF используется для проверки того, больше ли значение i 10 или нет. Как только значение «i» становится равным 10, выполняется оператор Exit Do, и цикл завершается.
Выполнить до цикла
Циклы «Делать до» очень похожи на циклы «Делать, пока».
В режиме "Делать пока" цикл выполняется до тех пор, пока не будет выполнено заданное условие, а в режиме "Делать до тех пор" цикл выполняется до тех пор, пока не будет выполнено указанное условие.
Существует два типа синтаксиса в цикле "Выполнить до".
Разница между этими двумя вариантами заключается в том, что в первом случае сначала проверяется условие «До тех пор», прежде чем будет выполнен какой-либо блок кода, а во втором случае сначала выполняется блок кода, а затем проверяется условие «До тех пор».
Это означает, что если условие «До тех пор» имеет значение TRUE в обоих случаях, код все равно будет выполняться хотя бы один раз во втором случае (поскольку условие «До» проверяется после того, как код был выполнен один раз).
Теперь давайте рассмотрим несколько примеров использования циклов "До тех пор" в VBA.
Примечание. Все примеры для команды "Делать до" такие же, как и для команды "Делать пока". Они были изменены, чтобы показать вам, как работает цикл «До».
Пример 1. Добавление первых 10 положительных целых чисел с помощью VBA
Предположим, вы хотите сложить первые десять положительных целых чисел, используя цикл "До тех пор" в VBA.
Для этого вам нужно запустить цикл, пока следующее число не станет меньше или равно 10. Как только число станет больше 10, ваш цикл остановится.
Вот код VBA, который запустит этот цикл и покажет результат в окне сообщения.
Приведенный выше цикл продолжает работать до тех пор, пока значение «i» не станет равным 11. Как только оно станет равным 11, цикл завершится (поскольку условие «До» становится истинным).
Пример 2. Введите даты текущего месяца
Допустим, вы хотите ввести все даты текущего месяца в столбец листа.
Это можно сделать, используя следующий код цикла "До":
Приведенный выше код вводит все даты в первый столбец рабочего листа (начиная с A1). Цикл продолжается до тех пор, пока месяц переменной CMDate не будет равен месяцу текущего месяца.
Выход из выполнения
Для выхода из цикла можно использовать оператор Exit Do.
Как только код выполняет строку «Выход из выполнения», он выходит из цикла «Выполнить до» и передает управление следующей строке сразу после цикла.
Например, если вы хотите ввести только первые 10 дат, вы можете выйти из цикла, как только будут введены первые 10 дат.
Приведенный ниже код сделает это:
В приведенном выше коде, как только значение «i» становится равным 10, выполняется оператор Exit Do, и цикл завершается.
Для каждого
В VBA вы можете перебрать набор коллекций, используя цикл For Each.
Вот несколько примеров коллекций в Excel VBA:
- Собрание всех открытых книг.
- Набор всех рабочих листов в книге.
- Набор всех ячеек в диапазоне выбранных ячеек.
- Набор всех диаграмм или фигур в книге.
Используя цикл «Для каждого», вы можете пройтись по каждому объекту в коллекции и выполнить над ним какое-либо действие.
Например, вы можете просмотреть все рабочие листы в книге и защитить их или просмотреть все выбранные ячейки и изменить форматирование.
С циклом "Для каждого" (также называемым циклом "Для каждого-следующего") вам не нужно знать, сколько объектов содержится в коллекции.
Цикл For Each автоматически проходит по каждому объекту и выполняет указанное действие. Например, если вы хотите защитить все листы в книге, код будет одинаковым, независимо от того, есть ли у вас книга с 3 листами или 30 листами.
Вот синтаксис цикла For Each-Next в Excel VBA.
Теперь давайте рассмотрим пару примеров использования цикла For Each в Excel.
Пример 1. Просмотрите все рабочие листы в рабочей книге (и защитите ее)
Предположим, у вас есть книга, в которой вы хотите защитить все листы.
Ниже цикл For Each-Next может сделать это легко:
В приведенном выше коде мы определили переменную «ws» как объект Worksheet. Это говорит VBA, что «ws» следует интерпретировать в коде как объект рабочего листа.
Теперь мы используем оператор For Each, чтобы просмотреть каждый ws (который является объектом рабочего листа) в коллекции всех рабочих листов в активной книге (предоставленной ActiveWorkbook.Worksheets).
Обратите внимание, что в отличие от других циклов, в которых мы пытались защитить все листы в книге, здесь нам не нужно беспокоиться о том, сколько листов в книге.
Нам не нужно считать их, чтобы запустить цикл. Цикл For Each гарантирует, что все объекты будут проанализированы один за другим.
Пример 2. Просмотр всех открытых книг (и сохранение всех)
Если вы работаете с несколькими книгами одновременно, может пригодиться возможность сохранять все эти книги одновременно.
Ниже код VBA может сделать это для нас:
Обратите внимание, что в этом коде вы не получаете приглашение сохранить книгу в определенном месте (если сохраняете ее в первый раз).
Он сохраняет его в папке по умолчанию (в моем случае это была папка «Документы»). Этот код работает лучше всего, когда эти файлы уже сохранены, и вы вносите изменения и хотите быстро сохранить все книги.
Пример 3. Просмотр всех ячеек в выделенном фрагменте (выделение отрицательных значений)
Используя цикл "Для каждого", вы можете просмотреть все ячейки в определенном диапазоне или в выбранном диапазоне.
Это может быть полезно, если вы хотите проанализировать каждую ячейку и выполнить действие на ее основе.
Например, ниже приведен код, который просматривает все ячейки в выделенном фрагменте и меняет цвет ячеек с отрицательными значениями на красный.
(Обратите внимание, что я использовал Cll в качестве короткого имени переменной для ячейки. Не рекомендуется использовать имена объектов, такие как Sheets или Range, в качестве имен переменных)
В приведенном выше коде цикл For Each-Next проходит через набор ячеек в выделенном фрагменте. Оператор IF используется для определения того, является ли значение ячейки отрицательным или нет. В этом случае ячейке присваивается красный внутренний цвет, иначе она переходит к следующей ячейке.
Если у вас нет выбора, и вместо этого вы хотите, чтобы VBA выбрал все заполненные ячейки в столбце, начиная с определенной ячейки (точно так же, как мы используем Control + Shift + клавишу со стрелкой вниз, чтобы выбрать все заполненные ячейки) , вы можете использовать следующий код:
В приведенном выше примере не имеет значения, сколько заполненных ячеек. Он начнется с ячейки A1 и проанализирует все смежные заполненные ячейки в столбце.
Также не обязательно выбирать ячейку A1. Вы можете выбрать любую удаленную ячейку, и когда код запустится, он все равно будет учитывать все ячейки в столбце A (начиная с A1) и окрашивать отрицательные ячейки.
Утверждение «Выйти для»
Вы можете использовать оператор Exit For в цикле For Each-Next, чтобы выйти из цикла. Обычно это делается в случае выполнения определенного условия.
Например, в примере 3, когда мы просматриваем набор ячеек, может быть более эффективно проверить, есть ли какие-либо отрицательные значения или нет. Если отрицательных значений нет, мы можем просто выйти из цикла и сэкономить время обработки VBA.
Ниже приведен код VBA, который это сделает:
Где разместить код VBA
Хотите узнать, где находится код VBA в вашей книге Excel?
Excel имеет серверную часть VBA, которая называется редактором VBA. Вам необходимо скопировать и вставить код в окно кода модуля VB Editor.
Читайте также: