Использование операторов For Each. Next
Операторы For Each. Next повторяют блок операторов для каждого объекта в коллекции или каждого элемента массива. Visual Basic автоматически присваивает переменную при каждом выполнении цикла. Например, следующая процедура добавляет 10 к значению каждой ячейки в диапазоне от A1 до A10.
Sub Add10ToAllCellsInRange() Dim rng As Range For Each rng In Range("A1:A10") rng.Value = rng.Value + 10 Next End Sub
Указанный ниже код перебирает все элементы массива и устанавливает для каждого из них значение переменной-счетчика I.
Dim TestArray(10) As Integer, I As Variant For Each I In TestArray TestArray(I) = I Next I
Проход по диапазону ячеек
Цикл For Each. Next можно использовать для прохода по диапазону ячеек. Приведенная ниже процедура проходит по диапазону ячеек A1:D10 на листе Sheet1 и присваивает каждой ячейке, абсолютное значение которой меньше 0,01, значение 0 (ноль).
Sub RoundToZero() For Each rng in Range("A1:D10") If Abs(rng.Value) < 0.01 Then rng.Value = 0 Next End Sub
Выход из цикла For Each. Next до его завершения
Из цикла For Each. Next можно выйти с помощью оператора Exit For. Например, при возникновении ошибки можно использовать оператор Exit For в блоке True оператора If. Then. Else или оператора Select Case, который используется непосредственно для проверки ошибок. Если ошибка не возникает, оператор If…Then…Else получает значение False, и цикл продолжает работу.
В следующем примере выполняется поиск первой ячейки диапазона A1:B5, не содержащей число. Если такая ячейка найдена, выводится сообщение и выполняется выход из цикла с помощью оператора Exit For.
Sub TestForNumbers() For Each rng In Range("A1:B5") If IsNumeric(rng.Value) = False Then MsgBox "Cell " & rng.Address & " contains a non-numeric value." Exit For End If Next rng End Sub
Использование цикла For Each. Next для итерации в классе VBA
Для каждого. Следующие циклы не только итерируют массивы и экземпляры объекта Collection . Они также могут выполнять итерацию в созданном вами классе VBA.
Ниже приведен пример, в котором показано, как это сделать.
- Создайте модуль класса в редакторе Visual Basic (VBE) и присвойте ему имя CustomCollection. cc1
- Вставьте следующий код в только что созданный модуль.
Private MyCollection As New Collection ' The Initialize event automatically gets triggered ' when instances of this class are created. ' It then triggers the execution of this procedure. Private Sub Class_Initialize() With MyCollection .Add "First Item" .Add "Second Item" .Add "Third Item" End With End Sub ' Property Get procedure for the setting up of ' this class so that it works with 'For Each. ' ' constructs. Property Get NewEnum() As IUnknown ' Attribute NewEnum.VB_UserMemId = -4 Set NewEnum = MyCollection.[_NewEnum] End Property
VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "CustomCollection" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = False Private MyCollection As New Collection ' The Initialize event automatically gets triggered ' when instances of this class are created. ' It then triggers the execution of this procedure. Private Sub Class_Initialize() With MyCollection .Add "First Item" .Add "Second Item" .Add "Third Item" End With End Sub ' Property Get procedure for the setting up of ' this class so that it works with 'For Each. ' ' constructs. Property Get NewEnum() As IUnknown ' Attribute NewEnum.VB_UserMemId = -4 Set NewEnum = MyCollection.[_NewEnum] End Property
Dim Element Dim MyCustomCollection As New CustomCollection For Each Element In MyCustomCollection MsgBox Element Next
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Как создавать, изменять и запускать макросы в Excel
Excel предусматривает огромное количество функций по автоматизации вычислений и обработки данных. Тем не менее, объем человеческих задач очень большой, и не всегда встроенного функционала достаточно. Да, даже если он очень широкий. В этих случаях ситуацию спасают макросы.
Они значительно увеличивают эффективность работы с информацией. Дело в том, что они не только помогают реализовать некоторые функции, которые отсутствуют в стандартном комплекте, но и автоматизировать часто повторяющиеся действия. Сегодня мы более детально разберемся в том, что такое макросы, как они работают и как создавать новые и редактировать старые макросы.
Что такое макрос и для чего он применяется
Итак, макрос – это набор команд, которые должен выполнить Эксель. Они дают возможность автоматизировать почти любые часто повторяющиеся задачи. Достаточно просто выбрать одну команду один раз, воспользовавшись комбинацией горячих клавиш или панелью инструментов.
Макросы пишутся с помощью языка программирования VBA, но простой макрос можно записать и без него. Технически он ничем не отличается от программы, потому что содержит набор инструкций, которые компьютеру нужно выполнить. Нередко макрос сравнивается с кулинарным рецептом, где также описывается, в какой последовательности нужно выполнить какие действия, чтобы получить желаемый результат.
Но у макроса и рецепта есть одно ключевое различие. Макрос запускается один раз, после чего все остальные действия выполняет вручную. Поэтому если использовать кухонные метафоры, его проще сравнить с мультиваркой, в которую достаточно один раз положить нужные ингредиенты, после чего блюдо будет приготовлено самостоятельно.
Инструкции, которые передаются макросу, содержат макрооператоры – конкретные команды, которые офисному пакету нужно выполнить. Ряд из них являются специфическими, но большая часть соответствует командам из главного меню. Это делается для того, чтобы сделать процесс создания макросов более дружелюбным для пользователя.
Давайте приведем один пример. Любое приложение, независимо от используемой операционной системы, содержит кнопку «Закрыть». Если мы хотим сделать это через макрос, нам нужно ввести в среду разработки команду ActiveWindow.Close. Видим, что по названиям операторов можно много чего понять, поскольку все они пишутся на английском языке. Это также упрощает задачу пользователя, который знает английский язык.
Бояться макросов не нужно, поскольку VBA – очень простой язык программирования. Большую часть действий можно запрограммировать, даже не написав ни строчки кода. Достаточно просто эти действия записать один раз. При этом важно помнить, что редактор кода значительно функциональнее по сравнению с визуальными методами написания макросов.
Как создать новый макрос в Excel
Как мы уже поняли, есть два способа записи макросов в Excel: ручной или автоматический. Чтобы воспользоваться последним методом, не требуется наличие каких-либо навыков программирования. Правда, он ограничен и не дает возможности записывать условия, формировать сложные циклы и так далее.
Поэтому для профессионального овладения электронными таблицами умение программировать обязательно. Ведь нередко кроме непосредственно написания кода невозможно вообще как-либо решать поставленные задачи.
Способ 1. Автоматический запуск макроса
Перед тем, как записывать макросы, необходимо провести ряд несложных настроек, прежде всего, включить сами макросы. Правда, на данном этапе начинающего пользователя могут встретить некоторые трудности. Дело в том, что настройки макросов находятся на вкладке «Разработчик», доступ к которой изначально закрыт. Поэтому нужно сначала включить эту возможность. Последовательность действий следующая:
- Найти меню «Файл» и сделать по нему левый клик мышью.

- Далее появляется экран с набором подпунктов. Нам нужно выбрать меню «Параметры».

- После этого находим пункт «Настройка ленты» и ищем в нем флажок, активирующий вкладку «Разработчик».
- Подтверждаем свои действия путем нажатия клавиши «ОК».

После этого мы увидим вкладку «Разработчик» в нашей программе. Делаем переход по ней. Перед нами появляется большое количество инструментов разработчика. Из всего этого ассортимента нас интересует группа «Код». Там находится маленькая кнопка «Записать макрос», после клика по которой осуществляется непосредственная запись этой программы.
Далее пользователь увидит диалоговое окно. С него можно задать параметры для нашей будущей подпрограммы. Здесь доступны следующие настройки:
- Имя макроса. Допустимо использование какого-угодно имени за исключением того, которое начинается с числа или символа. При этом нельзя в качестве имени использовать больше одного слова.
- Комбинация клавиш. Это некий пусковой крючок для макроса. Он используется для того, чтобы включить макрос. Все горячие клавиши начинаются с клавиши Ctrl, а вторую можно настроить самостоятельно. Например, можно использовать горячую клавишу r. Также возможен ввод большой буквы. Для этого необходимо воспользоваться клавишей Shift, которая автоматически добавляется в комбинацию горячих клавиш.
- Место хранения. По умолчанию предусмотрен вариант, когда макрос применяется к текущей книге. Тем не менее, пользователь может выбрать новую или создать собственную книгу для макросов.
- Описание. При желании пользователь может в нескольких предложениях описать, что будет делать макрос. Это будет особенно полезно, если одной и той же книгой пользуются несколько человек.
После выполнения всех действий нужно нажать клавишу ОК, тем самым подтвердив изменения. Теперь все действия, совершаемые пользователем, будут автоматически записываться в макрос. Это будет продолжаться ровно до тех пор, пока запись программы не будет остановлена. Значительно проще разобрать это на реальном примере. Давайте сделаем программку, которая будет умножать содержимое двух ячеек. Для этого нужно запустить запись макроса, ввести в ячейку формулу (в нашем случае это =B2*B3), нажать клавишу Enter, после чего остановить запись. Кнопка остановки записи макроса находится на вкладке «Разработчик» в группе «Код».
Запуск выполнения макроса
Как же проверить, работает ли наш макрос? Для этого нужно выполнить следующие действия:
- Открыть вкладку «Разработчик». Там в самой левой части есть кнопка «Макросы», по которой нужно сделать левый клик мышью один раз. Кроме этого, пользователь может открыть аналогичную опцию путем нажатия горячих клавиш Alt + F8.

- После этого у нас откроется окно настройки макросов. Нужно выбрать тот, который мы только что создали, и нажать на кнопку «Выполнить». Этот же результат можно получить, если нажать сочетание клавиш, которое мы назначили для макроса раньше.

- О том, что макрос работает, мы можем судить по действиям программы. Если они повторяют те, которые были сделаны раньше, значит все ОК.

Таким способом можно проверить любой макрос. Но что делать, если оказывается, что он работает не совсем так, как нам нужно было?
Корректировка макроса
Если в ходе исполнения макроса появляются какие-то проблемы, их можно исправить. Самая распространенная проблема, по которой команды не выполняются, как надо – ошибки пользователя на этапе первичной записи команд. Чтобы отредактировать созданный макрос, нужно выполнить следующие действия.

- Открыть окошко макросов путем нажатия на ту же кнопку, что была описана выше или же воспользоваться комбинацией клавиш.
- Выбираем наш макрос. Находим кнопку «Изменить», которая находится справа от него. Делаем единичный левый клик мышью по ней.
- После этого откроется редактор Visual Basic. Правки придется вносить в код, поэтому если навыков программирования нет, нужно быть очень внимательным при записи макроса.
На данном этапе нужно уже немного переходить к следующей теме: ручное редактирование макроса. Любой макрос начинается командой Sub. О том, что макрос заканчивается, компьютер понимает по команде End Sub. После слова Sub показывается название макроса. После этого в структуре записывается описание макроса и та комбинация клавиш, которая необходима для его запуска.

Далее следуют команды, которые выполняют конкретные действия. Например, номер ячейки мы получаем с помощью оператора Range. В нашем примере, мы получаем ячейку B2 с помощью команды Range(“B2″).Select. Это действие аналогично выбору ячейки левой кнопкой мышки. Значение ячейки, которая выбрана на данный момент указывается с помощью оператора ActiveCell.FormulaR1C1.
Давайте попробуем наш макрос немного отредактировать. Допустим, нам нужно выполнить такую задачу: добавить дополнительную ячейку с адресом B4 и значением 3. В таком случае в код необходимо добавить такие строки:

На первый взгляд это может показаться довольно сложной задачей, но на самом деле, команды – это полноценный язык, который нужно просто изучить. Представьте, что вы пишете сообщение, только не человеку, а компьютеру с просьбой сделать то-то и то-то. Да, программирование именно так и устроено по факту. Все намного проще, чем кажется.
Но это уже лирическое отступление. Нам еще осталось совершить одно действие – изменить первоначальное выражение, которое касалось ячейки D2, на это: ActiveCell.FormulaR1C1 = «=RC[-2]*R[1]C[-2]*R[2]C[-2]»

Внимание! Видим, что адреса в ячейках в данном примере записываются, как R1C1.
После того, как мы выполним все описанные выше действия, можно закрыть редактор макросов. Для этого достаточно просто кликнуть по крестику. То есть, выполнить действия, аналогичные закрытию любого окна в операционной системе.
Далее нужно перепроверить макрос еще раз. Видим, что после его исполнения в таблице появилась еще одна ячейка. Если макрос очень большой, то ручное редактирование имеет множество преимуществ перед повторной его записью. Также оно позволяет избежать повторных ошибок.
Также можно ускорить работу макроса путем добавления команды Application.ScreenUpdating = False. После этого на экране не будут показываться те промежуточные шаги, которые выполняет макрос, лишь конечный результат. Если же нужно, чтобы отображение на экране было вновь включено, тогда нужно заменить False на True.
Способ 2. Создание макроса в ручном режиме
Автоматическая запись макроса – это хорошо, но данный метод имеет множество недостатков. Профессионалы создают макросы вручную. Для этого нужно выучить язык VBA и выполнять следующие действия:
- Перейти во вкладку «Разработчик» и нажать на кнопку «Visual Basic». Она находится в самой левой части панели инструментов в этой вкладке.

- Далее появится окно, которое мы уже знаем по предыдущему разделу.

- Весь код пишется здесь.
Надо отметить, что все детали сегодня рассмотреть не получится, поскольку нужно знать язык VBA для этого. Тем не менее, общий механизм такой. А после того, как вы освоите язык VBA, вы сможете уже учиться и более сложным языкам программирования, поскольку логика одинаковая что для написания макроса, что для написания полноценных компьютерных программ.
Как изменять существующие макросы
Детали о том, как изменять существующие макросы, описывались выше. В целом логика остается той же самой, за тем лишь исключением, что коррекция макросов – это точечные изменения (например, отредактировать ячейку, если случайно была выбрана неправильно). В то время как изменение – более фундаментальное редактирование, включая добавление новых строк кода и так далее.
Заключение
Мы видим, что макросы – это высокоэффективный инструмент, позволяющий автоматизировать огромные массивы работы. Если пользователю приходится выполнять огромное количество однотипных действий, или имеющихся возможностей Excel не хватает, они способны легко и просто исправить ситуацию.
Как использовать макросы в Excel
wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали авторы-волонтеры.
Количество просмотров этой статьи: 19 155.
В этой статье:
Иногда в таблице Excel присутствует процесс, который должен повторяться с определенной периодичностью. Вы можете настроить макрос для повторения этого процесса вместо того, чтобы каждый раз самому проделывать все эти шаги. Чтобы сэкономить свое время, разберитесь, как использовать макросы в Excel.
Метод 1 из 2:
Использование макросов в Excel (за исключением Excel 2008 для Mac)
![]()
Проверьте, что ваши настройки Excel позволяют вам запускать макросы. Эта настройка в большинстве версий Excel находится в разделе "Security"("Безопасность").
![]()
Откройте книгу Excel, которая содержит или будет содержать макрос.
![]()
Проверьте, что в конкретной книге включены макросы, что позволит им запускаться.
![]()
Решите, как вы будете использовать макрос. Макрос может запускаться из меню, присоединенному к кнопке в книге, запускаться автоматически при открытии таблицы или быть привязанным к определенной команде с клавиатуры.
![]()
- Чтобы записать макрос, найдите команду "Record New Macro" ("Запись макроса"). Она может находиться в разделе "Macros" ("Макросы") выпадающего меню "Tools" ("Инструменты") или на Ленте, внутри окна макроса (которое, опять же, обычно находится в разделе "Tools" ("Инструменты")), или на панели инструментов в зависимости от версии и конкретной установки Excel, и типа вашей системы.
![]()
Откройте меню макросов, которое обычно находится в разделе "Tools" ("Инструменты").
![]()
Протестируйте макрос, который хотите использовать, убедитесь, что он работает правильно.
![]()
Назначьте макрос на любую кнопку, команду с клавиатуры или добавьте его в автозапуск при открытии таблицы, с которой он будет использоваться.
![]()
Запускайте макрос, когда потребуется.
Метод 2 из 2:
Использование макросов в Excel 2008 для Mac
![]()
Откройте книгу, в которую хотите добавить макрос.
![]()
Откройте "Script Utility" ("Утилиту написания скриптов"), расположенную в папке "AppleScript" внутри вашей папки "Applications" ("Приложения"). (Глобальная папка "Applications" ("Приложения") - это та папка на компьютере, которую вы видите перед открытием папки вашего аккаунта.)
![]()
Нажмите кнопку "запись" и воспроизведите процесс, который должен будет выполнять макрос.
![]()
Проверьте, что записанный макрос работает, как нужно. (Не все действия можно описать в скрипте, т.е. вы не сможете записать их с помощью AppleScript.)
покупка
Как повторять или зацикливать макрос каждые X минут в Excel?
При работе с Microsoft Excel вам может потребоваться создание макросов для выполнения некоторых операций. Например, вы хотите создать макрос для автоматического копирования диапазона данных в новое место. Поскольку данные будут часто меняться, вам необходимо, чтобы этот макрос запускался автоматически каждые 5 минут без его ручного запуска, чтобы синхронизировать эти два диапазона данных. Как этого добиться? Метод, описанный в этой статье, может вам помочь.
Повторять или зацикливать макрос каждые X минут в Excel
Следующий код VBA может помочь вам повторять макрос каждые X минут в Excel. Пожалуйста, сделайте следующее.
1. Нажмите другой + F11 в то же время, чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окно, пожалуйста, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в Code окно. Смотрите скриншот:
Код VBA: повторять или зацикливать макрос каждые X минут в Excel
Sub ReRunMacro() Dim xMin As String 'Insert your code here xMin = GetSetting(AppName:="Kutools", Section:="Macro", Key:="min", Default:="") If xMin = "Exit" Then SaveSetting "Kutools", "Macro", "min", "False" Exit Sub End If If (xMin = "") Or (xMin = "False") Then xMin = Application.InputBox(prompt:="Please input the interval time you need to repeat the Macro", Title:="Kutools for Excel", Type:=2) SaveSetting "Kutools", "Macro", "min", xMin End If If (xMin <> "") And (xMin <> "False") Then Application.OnTime Now() + TimeValue("0:" + xMin + ":0"), "ReRunMacro" Else Exit Sub End If End Sub
Внимание: В коде замените эту строку 'Вставьте сюда свой код с кодом вы будете запускаться каждые X минут.

3. нажмите F5 ключ для запуска кода. В всплывающем Kutools for Excel диалоговое окно, введите интервал времени, в течение которого будет повторяться макрос, а затем нажмите кнопку OK кнопка. Смотрите скриншот:

С этого момента определенный макрос будет запускаться в вашей книге каждые 5 минут.
Внимание: Если вам нужно остановить выполнение макроса и изменить интервал цикла, скопируйте приведенный ниже код VBA в тот же Модули окно и нажмите F5 ключ для запуска кода. После этого макрос будет остановлен. Повторите приведенный выше код, чтобы указать новый интервал.
Код VBA: остановить выполнение макроса
Sub ExitReRunMacro() SaveSetting "Kutools", "Macro", "min", "Exit" End Sub
Office Tab - Просмотр, редактирование и управление книгами в Excel с вкладками:
Office Tab переносит интерфейс с вкладками, как в веб-браузерах, таких как Google Chrome, новые версии Internet Explorer и Firefox, в Microsoft Excel. Он станет незаменимым помощником в работе и сэкономит время. См. Демонстрацию ниже:
Статьи по теме:
- Как повторить строки при прокрутке листа в Excel?
- Как повторить последнее или предыдущее действие в Excel?
- Как повторно печатать строки внизу каждой распечатанной страницы в Excel?
- Как повторять значение ячейки, пока новое значение не будет видно или достигнуто в Excel?
Лучшие инструменты для офисной работы
Усовершенствуйте свои навыки работы с Excel с помощью Kutools for Excelи испытайте эффективность, как никогда раньше. Kutools for Excel Предлагает более 300 расширенных функций для повышения производительности и экономии времени. Нажмите здесь, чтобы получить функцию, которая вам нужна больше всего.
Office Tab Добавляет в Office интерфейс с вкладками и значительно упрощает вашу работу
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint , Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Newest First
Sort comments by
Comments ( 32 )
No ratings yet. Be the first to rate!
about 10 months ago
This comment was minimized by the moderator on the site
klo mengulang Makro sebanyak 3 kali, atau seberapa kali yang kita mau, itu gi mana yahh ? trima kasih sebelumny.
about 10 months ago
This comment was minimized by the moderator on the site
The following VBA code can help. Please give it a try. Thank you.
Notes: In the code, you need to configure the following lines to meet your needs:
1) In this line: If Val(xNum) = 3 Then
Here the number 3 represents the number of times you want to repeat the macro. After three times looping, the macro will stop. Please change it to the number of times you need.
2) In this line: Application.OnTime Now() + TimeValue("0:" + "0" + ":10"), "ReRunMacro"
The number 10 here means that the macro will repeat every 10 seconds. You can specify the hours, minutes and seconds as you need.
Sub ReRunMacro() 'Updated by Extendoffice 20230203 Dim xMin As String Dim xNum As String 'Insert your code here Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long Dim K As Long I = Worksheets("Sheet1").UsedRange.Rows.Count J = Worksheets("Sheet2").UsedRange.Rows.Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("Sheet1").Range("C1:C" & I) On Error Resume Next Application.ScreenUpdating = False For K = 1 To xRg.Count If CStr(xRg(K).Value) = "Done" Then xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1) J = J + 1 End If Next Application.ScreenUpdating = True xMin = GetSetting(AppName:="Kutools", Section:="Macro", Key:="min", Default:="") xNum = GetSetting(AppName:="Kutools", Section:="Macro", Key:="Num", Default:="") If xMin = "Exit" Then SaveSetting "Kutools", "Macro", "min", "False" Exit Sub End If If xNum = "" Then xNum = "1" If Val(xNum) = 3 Then 'Here the number 3 represents the number of times you want to repeat the macro. After three times looping, the macro will stop xNum = 1 SaveSetting "Kutools", "Macro", "Num", "1" Application.OnTime EarliestTime:=TimeValue("17:00:00"), Procedure:="ReRunMacro", Schedule:=False Exit Sub End If xNum = Str(Val(xNum) + 1) SaveSetting "Kutools", "Macro", "Num", xNum If (xMin = "") Or (xMin = "False") Then xMin = Application.InputBox(prompt:="Please input the interval time you need to repeat the Macro", Title:="Kutools for Excel", Type:=2) SaveSetting "Kutools", "Macro", "min", xMin End If If (xMin <> "") And (xMin <> "False") Then Application.OnTime Now() + TimeValue("0:" + "0" + ":10"), "ReRunMacro" 'The number 10 here means that the macro will repeat every 10 seconds. You can specify the hours, minutes and seconds as you need. Else Exit Sub End If End Sub