Vba for loop (для следующего, для каждого)
Ключевые моменты
- Циклы VBA For — это фиксированные типы циклов.
- Невозможно использовать один из этих циклов при записи макроса .
Для следующего цикла
VBA FOR NEXT — это фиксированный цикл, в котором для выполнения итераций используется счетчик. Проще говоря, вам нужно указать, сколько раз вы хотите запустить цикл, и как только он достигнет этого количества циклов, он автоматически остановится. Вот почему это фиксированный цикл, который наиболее популярен среди разработчиков VBA.
Синтаксис
Вот синтаксис цикла VBA For Next:
For counter = Start To End [Step stepsize] [statements] Next [counter]

- Счетчик : это переменная, которая хранит количество повторений и увеличивает свое значение с каждым повторением. Например, если цикл находится на пятой итерации, значение счетчика будет равно пяти, а как только цикл выполнит команду пятой итерации, значение счетчика изменится на шесть.
- Start : это числовая переменная, в которой хранится начальное значение счетчика.
- End : это числовая переменная, в которой хранится окончательное значение счетчика.
- Размер шага : эта переменная определяет большое увеличение или уменьшение значения счетчика. По умолчанию размер шага равен единице, но вы также можете использовать любое положительное или отрицательное значение.
- Оператор : это набор кода, который вы хотите запускать на каждой итерации цикла For Next.
- Далее : это конечный оператор итерации цикла, который использует значение счетчика, чтобы сообщить VBA о необходимости повторения цикла, и как только счетчик достигнет конечного значения, он завершит цикл.
Пример для понимания следующего цикла
Чтобы понять, как его использовать для следующего цикла, давайте напишем простой код для добавления серийных номеров в столбец.
Позвольте мне рассказать немного подробнее: нам нужно написать код, который сможет переходить от выбранной ячейки к следующим 10 ячейкам одну за другой и добавлять серийные номера только на снимке ниже.

Чтобы использовать следующий цикл, вы можете выполнить следующие шаги:
- Во-первых, вам нужно объявить переменную, которую вы сможете использовать для хранения значения счетчика.
- Далее нам нужно присвоить значение счетчика переменной.
- Теперь пришло время написать код цикла, поэтому в первой строке вам нужно использовать переменную счетчика и установить начальное и конечное значения. Здесь, в этом коде, у вас есть переменная «i» в качестве конечного значения.
- После этого вам нужно написать код, который сможет добавлять серийные номера в активную ячейку, а затем переходить к следующей ячейке. Поскольку значение счетчика увеличивается с каждой итерацией, вы можете использовать его для ввода серийного номера в активную ячейку, а после этого использовать сдвиг для перемещения выделения на следующую ячейку вниз.
- В конце используйте ключевое слово next и переменную счетчика, чтобы завершить код цикла.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
На снимке ниже вы можете видеть, что когда я запускаю этот код, он начинается с выбранной ячейки путем ввода серийного номера, а затем переходит к следующей ячейке на каждой итерации.

Как вы знаете, For Next — это фиксированный цикл, и в этом коде, когда вы назначаете числовое значение, он сообщает VBA выполнить цикл указанное количество раз.
Ниже вы можете увидеть снимок, который я сделал во второй итерации цикла, где значение переменной счетчика «i» равно двум.

Я пытаюсь подчеркнуть, что переменная count меняет свое значение на каждой итерации и вводит это значение в активную ячейку, а затем сдвиг активирует следующую ячейку вниз, что завершает итерацию.
В конце концов, ключевое слово «Next» позволяет VBA вернуться к первой строке цикла и повторить его. Как вы видели в синтаксисе For Next, вы также можете использовать значение шага в цикле, чтобы управлять счетчиком на его основе.
Итак, если вы используете два в качестве значения шага, код будет выглядеть следующим образом.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i Step 2 ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
И когда вы запустите этот код, в активности будет что-то вроде снимка ниже.

Когда вы используете значение шага (например, шаг 2, который вы использовали в коде выше), VBA игнорирует каждую вторую итерацию в цикле, и, как вы можете видеть, у вас есть пять чисел с разницей в одно в каждом числе.
Примечание . В приведенном выше примере вы использовали «i» в качестве переменной- счетчика, но вы также можете использовать другое имя по вашему усмотрению.
Для каждого последующего цикла
VBA FOR EACH NEXT — это фиксированный цикл, который может перебирать все объекты в коллекции. В For Each Next вам не нужно указывать количество итераций. Вместо этого вы можете указать коллекцию объектов, и она сможет перебирать все эти объекты один за другим.
Например : если вы хотите просмотреть все ячейки в диапазоне. В этом случае диапазон — это коллекция, а ячейки — это имеющиеся у вас объекты.
Синтаксис
Вот синтаксис VBA для каждого последующего цикла:
For Each Object In Collection [statements] Next [object]

- Объект : представляет единственный объект в коллекции объектов, через который вы проходите. На каждой итерации переходит от одного объекта к другому.
- Коллекция : это коллекция объектов, которые вы хотите просмотреть.
- Оператор : строки кода, которые вы хотите запускать в каждом цикле для всех объектов в коллекции.
- Next : это конечный оператор итерации цикла, который сообщает VBA о переходе к следующему объекту в коллекции.
Пример для понимания цикла For Each Next
Чтобы понять цикл «Для каждого следующего», давайте напишем код, который скроет все листы, кроме активного листа. Этот код проверит имя каждого листа, сопоставит его с именем активного листа и скроет его, если оно не совпадает.
Чтобы использовать цикл For Each Next, вы можете выполнить следующие шаги:
- Во-первых, вам нужно объявить переменную, которая будет использоваться в качестве рабочего листа.
- После этого используйте ключевое слово «Для каждого», затем переменную «mySheet» для листа и используйте «ActiveWorkbook.Worksheets» для коллекции листов активной книги.
- Затем вам нужно использовать оператор VBA IF, чтобы проверить, НЕ РАВНО ли имя листа, который в данный момент находится в этой итерации цикла, активному листу, и если это условие истинно, скрыть лист, который сейчас находится в цикле. итерация.
- В конце концов, у вас есть ключевое слово NEXT и переменная mySheet для завершения кода цикла.
Окончательный код:
Sub Hide_Other_Sheets() Dim mySheet As Worksheet For Each mySheet In ActiveWorkbook.Worksheets If mySheet.Name <> ActiveSheet.Name Then mySheet.Visible = False End If Next mySheet End Sub
Когда вы запускаете этот код , он просматривает каждый рабочий лист в активной книге и сопоставляет его имя с активным рабочим листом, и если имя рабочего листа не соответствует имени активного рабочего листа, он так и делает. маска.
Таким образом, все рабочие листы будут скрыты.