Цикл For Each… Next
Цикл For Each… Next в VBA Excel предназначен для выполнения блока операторов по отношению к каждому элементу из группы элементов (диапазон, массив, коллекция). Предусмотрен принудительный выход из цикла с помощью оператора Exit For.
Синтаксис
#VBA #ExcelVBA #ForEach #ForEachNext #ЦиклForEach #Цикл
Цикл For Each… Next в VBA Excel предназначен для выполнения блока операторов по отношению к каждому элементу из группы элементов (диапазон, массив, коллекция). Предусмотрен принудительный выход из цикла с помощью оператора Exit For.
Синтаксис
For Each element In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
#VBA #ExcelVBA #ForEach #ForEachNext #ЦиклForEach #Цикл
Примеры циклов For Each… Next
Цикл для диапазона ячеек
На активном листе рабочей книги Excel выделите диапазон ячеек и запустите на выполнение следующую процедуру:
Информационное окно MsgBox выведет адреса выделенных ячеек и их содержимое, если оно есть. Если будет выбрано много ячеек, то полностью информация по всем ячейкам выведена не будет, так как максимальная длина параметра Prompt функции MsgBox составляет примерно 1024 знака.
Цикл для коллекции листов
Скопируйте следующую процедуру VBA в стандартный модуль книги Excel:
Информационное окно MsgBox выведет список наименований всех листов рабочей книги Excel по порядковому номеру их ярлычков, соответствующих их индексам.
Цикл для массива
Присвоим массиву список наименований животных и в цикле For Each… Next запишем их в переменную a. Информационное окно MsgBox выведет список наименований животных из переменной a.
Повторим ту же процедуру VBA, но всем элементам массива в цикле For Each… Next присвоим значение «Попугай». Информационное окно MsgBox выведет список наименований животных, состоящий только из попугаев, что доказывает возможность редактирования значений элементов массива в цикле For Each… Next.
Цикл для коллекции подкаталогов и выход из цикла
В этом примере мы будем добавлять в переменную a названия подкаталогов на диске C вашего компьютера. Когда цикл дойдет до папки Program Files, он добавит в переменную a ее название и сообщение: «Хватит, дальше читать не буду! С уважением, Ваш цикл For Each… Next.».
Информационное окно MsgBox выведет список наименований подкаталогов на диске C вашего компьютера до папки Program Files включительно и сообщение цикла о прекращении своей работы.
Цикл для диапазона ячеек
На активном листе рабочей книги Excel выделите диапазон ячеек и запустите на выполнение следующую процедуру:
Sub test1()
Dim element As Range, a As String
a = "Данные, полученные с помощью цикла For Each... Next:"
For Each element In Selection
a = a & vbNewLine & "Ячейка " & element.Address & _
" содержит значение: " & CStr(element.Value)
Next
MsgBox a
End Sub
Информационное окно MsgBox выведет адреса выделенных ячеек и их содержимое, если оно есть. Если будет выбрано много ячеек, то полностью информация по всем ячейкам выведена не будет, так как максимальная длина параметра Prompt функции MsgBox составляет примерно 1024 знака.
Цикл для коллекции листов
Скопируйте следующую процедуру VBA в стандартный модуль книги Excel:
Sub test2()
Dim element As Worksheet, a As String
a = "Список листов, содержащихся в этой книге:"
For Each element In Worksheets
a = a & vbNewLine & element.Index _
& ") " & element.Name
Next
MsgBox a
End Sub
Информационное окно MsgBox выведет список наименований всех листов рабочей книги Excel по порядковому номеру их ярлычков, соответствующих их индексам.
Цикл для массива
Присвоим массиву список наименований животных и в цикле For Each… Next запишем их в переменную a. Информационное окно MsgBox выведет список наименований животных из переменной a.
Sub test3()
Dim element As Variant, a As String, group As Variant
group = Array("бегемот", "слон", "кенгуру", "тигр", "мышь")
'или можно присвоить массиву значения диапазона ячеек
'рабочего листа, например, выбранного: group = Selection
a = "Массив содержит следующие значения:" & vbNewLine
For Each element In group
a = a & vbNewLine & element
Next
MsgBox a
End Sub
Повторим ту же процедуру VBA, но всем элементам массива в цикле For Each… Next присвоим значение «Попугай». Информационное окно MsgBox выведет список наименований животных, состоящий только из попугаев, что доказывает возможность редактирования значений элементов массива в цикле For Each… Next.
Sub test4()
Dim element As Variant, a As String, group As Variant
group = Array("бегемот", "слон", "кенгуру", "тигр", "мышь")
'или можно присвоить массиву значения диапазона ячеек
'рабочего листа, например, выделенного: group = Selection
a = "Массив содержит следующие значения:" & vbNewLine
For Each element In group
element = "Попугай"
a = a & vbNewLine & element
Next
MsgBox a
End Sub
Цикл для коллекции подкаталогов и выход из цикла
В этом примере мы будем добавлять в переменную a названия подкаталогов на диске C вашего компьютера. Когда цикл дойдет до папки Program Files, он добавит в переменную a ее название и сообщение: «Хватит, дальше читать не буду! С уважением, Ваш цикл For Each… Next.».
Sub test5()
Dim FSO As Object, myFolders As Object, myFolder As Object, a As String
'Создаем новый FileSystemObject и присваиваем его переменной "FSO"
Set FSO = CreateObject("Scripting.FileSystemObject")
'Извлекаем список подкаталогов на диске "C" и присваиваем
'его переменной "myFolders"
Set myFolders = FSO.GetFolder("C:\")
a = "Папки на диске C:" & vbNewLine
'Проходим циклом по списку подкаталогов и добавляем в переменную "a"
'их имена, дойдя до папки "Program Files", выходим из цикла
For Each myFolder In myFolders.SubFolders
a = a & vbNewLine & myFolder.Name
If myFolder.Name = "Program Files" Then
a = a & vbNewLine & vbNewLine & "Хватит, дальше читать не буду!" _
& vbNewLine & vbNewLine & "С уважением," & vbNewLine & _
"Ваш цикл For Each... Next."
Exit For
End If
Next
Set FSO = Nothing
MsgBox a
End Sub
Информационное окно MsgBox выведет список наименований подкаталогов на диске C вашего компьютера до папки Program Files включительно и сообщение цикла о прекращении своей работы.
👍1
В результате работы программы будут выведены не только наименования подкаталогов, видимых при переходе в проводнике к диску C, но и скрытые и служебные папки. Для просмотра списка всех подкаталогов на диске C, закомментируйте участок кода от If до End If включительно и запустите выполнение процедуры в редакторе VBA Excel.
Цикл Do While… Loop
Цикл Do While… Loop в VBA Excel предназначен для повторения блока операторов до тех пор, пока выполняется заданное условие (возвращается значение True). Этот цикл позволяет проверять условие как до, так и после выполнения операторов. Предусмотрен принудительный выход из цикла с помощью оператора Exit Do
Синтаксис
Синтаксис цикла Do While… Loop существует в двух вариантах, определяющих, когда проверяется условие.
Условие проверяется до выполнения операторов:
Условие проверяется после выполнения операторов:
В квадратных скобках указаны необязательные атрибуты цикла Do While… Loop.
#VBA #ExcelVBA #DoWhile #DoWhileLoop #ЦиклDoWhile #Цикл
Цикл Do While… Loop в VBA Excel предназначен для повторения блока операторов до тех пор, пока выполняется заданное условие (возвращается значение True). Этот цикл позволяет проверять условие как до, так и после выполнения операторов. Предусмотрен принудительный выход из цикла с помощью оператора Exit Do
Синтаксис
Синтаксис цикла Do While… Loop существует в двух вариантах, определяющих, когда проверяется условие.
Условие проверяется до выполнения операторов:
Do While condition
[ statements ]
[ Exit Do ]
[ statements ]
Loop
Условие проверяется после выполнения операторов:
Do
[ statements ]
[ Exit Do ]
[ statements ]
Loop While condition
В квадратных скобках указаны необязательные атрибуты цикла Do While… Loop.
#VBA #ExcelVBA #DoWhile #DoWhileLoop #ЦиклDoWhile #Цикл
Примеры циклов Do While… Loop
Цикл Do While… Loop с условием до исполняемых операторов:
Цикл Do While… Loop с условием после исполняемых операторов:
Бесконечный цикл и Exit Do:
Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное окно MsgBox выведет на экран число повторений цикла Do While… Loop из этого примера.
Цикл Do While… Loop с условием до исполняемых операторов:
Sub test1()
Dim a As Byte
Do While a < 10
a = a + 1
Loop
MsgBox a
End Sub
Цикл Do While… Loop с условием после исполняемых операторов:
Sub test2()
Dim a As Byte
Do
a = a + 1
Loop While a < 10
MsgBox a
End Sub
Бесконечный цикл и Exit Do:
Sub test3()
Dim a As Byte, n As Long
Do While a < 10
a = a + 1
n = n + 1
If a = 9 Then
a = 0
End If
If n = 1000 Then
Exit Do
End If
Loop
MsgBox n
End Sub
Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное окно MsgBox выведет на экран число повторений цикла Do While… Loop из этого примера.
Цикл Do Until… Loop
Цикл Do Until… Loop в VBA Excel предназначен для повторения блока операторов пока не выполняется заданное условие (возвращается значение False). Этот цикл позволяет проверять условие как до, так и после выполнения операторов. Предусмотрен принудительный выход из цикла с помощью оператора Exit Do.
Синтаксис
Синтаксис цикла Do Until… Loop существует в двух вариантах, определяющих, когда проверяется условие.
Условие проверяется до выполнения операторов:
Условие проверяется после выполнения операторов:
В квадратных скобках указаны необязательные атрибуты цикла Do Until… Loop.
#VBA #ExcelVBA #DoUntil #DoUntilLoop #ЦиклDoUntil #Цикл
Цикл Do Until… Loop в VBA Excel предназначен для повторения блока операторов пока не выполняется заданное условие (возвращается значение False). Этот цикл позволяет проверять условие как до, так и после выполнения операторов. Предусмотрен принудительный выход из цикла с помощью оператора Exit Do.
Синтаксис
Синтаксис цикла Do Until… Loop существует в двух вариантах, определяющих, когда проверяется условие.
Условие проверяется до выполнения операторов:
Do Until condition
[ statements ]
[ Exit Do ]
[ statements ]
Loop
Условие проверяется после выполнения операторов:
Do
[ statements ]
[ Exit Do ]
[ statements ]
Loop Until condition
В квадратных скобках указаны необязательные атрибуты цикла Do Until… Loop.
#VBA #ExcelVBA #DoUntil #DoUntilLoop #ЦиклDoUntil #Цикл
Примеры циклов Do Until… Loop
Цикл Do Until… Loop с условием до исполняемых операторов:
Цикл Do Until… Loop с условием после исполняемых операторов:
Бесконечный цикл и Exit Do:
Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное окно MsgBox выведет на экран число повторений цикла Do Until… Loop из этого примера.
Цикл Do Until… Loop с условием до исполняемых операторов:
Sub test1()
Dim a As Byte
Do Until a > 9
a = a + 1
Loop
MsgBox a
End Sub
Цикл Do Until… Loop с условием после исполняемых операторов:
Sub test2()
Dim a As Byte
Do
a = a + 1
Loop Until a > 9
MsgBox a
End Sub
Бесконечный цикл и Exit Do:
Sub test5()
Dim a As Byte, n As Long
Do Until a > 10
a = a + 1
n = n + 1
If a = 10 Then
a = 0
End If
If n = 1000 Then
Exit Do
End If
Loop
MsgBox n
End Sub
Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное окно MsgBox выведет на экран число повторений цикла Do Until… Loop из этого примера.
Цикл While… Wend
Цикл While… Wend в VBA Excel предназначен для выполнения блока операторов до тех пор, пока выполняется заданное условие (возвращается значение True). Этот цикл позволяет проверять условие только до выполнения операторов. Принудительный выход из цикла с помощью оператора Exit Do не предусмотрен.
Синтаксис цикла While… Wend
#VBA #ExcelVBA #While #WhileWend #ЦиклWhile #Цикл
Цикл While… Wend в VBA Excel предназначен для выполнения блока операторов до тех пор, пока выполняется заданное условие (возвращается значение True). Этот цикл позволяет проверять условие только до выполнения операторов. Принудительный выход из цикла с помощью оператора Exit Do не предусмотрен.
Синтаксис цикла While… Wend
While condition
[ statements ]
Wend
#VBA #ExcelVBA #While #WhileWend #ЦиклWhile #Цикл
Пример цикла While… Wend
Информационное сообщение MsgBox выведет число 105.
Sub test1()
Dim a As Byte
While a < 100
a = a + 7
Wend
MsgBox a
End Sub
Информационное сообщение MsgBox выведет число 105.
✨ Функции для работы с буфером обмена
🛠 Функция записи текста в буфер обмена:
🛠 Функция вставки текста из буфера обмена:
🛠 Функция очистки буфера обмена:
✅ Пример использования функций для работы с буфером обмена:
#VBA #ExcelVBA #БуферОбмена #ClipBoard
🛠 Функция записи текста в буфер обмена:
Function SetClipBoardText(ByVal Text As Variant) As Boolean
SetClipBoardText = CreateObject("htmlfile").parentWindow.clipboardData.SetData("Text", Text)
End Function
🛠 Функция вставки текста из буфера обмена:
Function GetClipBoardText() As String
On Error Resume Next
GetClipBoardText = CreateObject("htmlfile").parentWindow.clipboardData.GetData("Text")
End Function
🛠 Функция очистки буфера обмена:
Function ClearClipBoardText() As Boolean
ClearClipBoardText = CreateObject("htmlfile").parentWindow.clipboardData.clearData("Text")
End Function
✅ Пример использования функций для работы с буфером обмена:
Sub Primer()
Dim s As String
s = "Копирование текста из переменной в буфер обмена"
'Копируем текст в буфер обмена
SetClipBoardText (s)
'Вставляем текс из буфера обмена в ячейку "A1"
Range("A1") = GetClipBoardText
'Очищаем буфер обмена, если это необходимо
ClearClipBoardText
End Sub
#VBA #ExcelVBA #БуферОбмена #ClipBoard
Обращение к ячейке
Все известные мне способы обращения к ячейке в VBA Excel.
Обращение к ячейке по адресу
Обращение к ячейке "C5" на активном листе:
Обращение к активной (выбранной) ячейке на активном листе:
Обращение к ячейке "C5" на неактивном листе книги с кодом:
Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.
Обращение к ячейке "C5" на листе "Лист2" другой открытой книги из книги с кодом:
Удобно обращаться к ячейке через свойство рабочего листа Cells(№ строки, № столбца), так как вместо номеров строк и столбцов можно использовать переменные.
#VBA #ExcelVBA #ОбращениеКЯчейке #Range #Cells
Все известные мне способы обращения к ячейке в VBA Excel.
Обращение к ячейке по адресу
Обращение к ячейке "C5" на активном листе:
Range("C5")
Cells(5, 3)
Cells(5, "C")
[C5]Обращение к активной (выбранной) ячейке на активном листе:
ActiveCell
Обращение к ячейке "C5" на неактивном листе книги с кодом:
'по основному имени листа
Лист2.Range("C5")
Лист2.Cells(5, 3)
Лист2.Cells(5, "C")
Лист2.[C5]
'по имени ярлыка
Sheets("Имя ярлыка").Range("C5")
Sheets("Имя ярлыка").Cells(5, 3)
Sheets("Имя ярлыка").Cells(5, "C")
Sheets("Имя ярлыка").[C5]
Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.
Обращение к ячейке "C5" на листе "Лист2" другой открытой книги из книги с кодом:
Workbooks("Книга2.xlsm").Sheets("Лист2").Range("C5")
Workbooks("Книга2.xlsm").Sheets("Лист2").Cells(5, 3)
Workbooks("Книга2.xlsm").Sheets("Лист2").Cells(5, "C")
Workbooks("Книга2.xlsm").Sheets("Лист2").[C5]Удобно обращаться к ячейке через свойство рабочего листа Cells(№ строки, № столбца), так как вместо номеров строк и столбцов можно использовать переменные.
#VBA #ExcelVBA #ОбращениеКЯчейке #Range #Cells
Обращение к ячейке по индексу
К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.
Для примера, Cells(4) - это та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel количество строк и столбцов на рабочем листе может быть разным.
По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range("A1:C3"):
К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.
Для примера, Cells(4) - это та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel количество строк и столбцов на рабочем листе может быть разным.
По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range("A1:C3"):
Обращение к ячейке по имени
Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.
Допустим одной из ячеек присвоено имя – "Итого", тогда обратиться к ней можно – Range("Итого").
Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.
Допустим одной из ячеек присвоено имя – "Итого", тогда обратиться к ней можно – Range("Итого").