Как сделать цикл в excel vba?

Все циклы VBA в одной статье

Рамакришна, Источники индийской мудрости

Сейчас … мы идем по кругу

Эта статья содержит полное руководство по VBA Do While и VBA While Loops. (Если вы ищете информацию о циклах VBA For и For Each, перейдите сюда)

Цикл VBA While существует, чтобы сделать его совместимым со старым кодом. Однако Microsoft рекомендует использовать цикл Do Loop, поскольку он более «структурирован и гибок». Оба этих цикла рассматриваются в этом посте.

Для быстрого ознакомления с этими циклами перейдите к таблице быстрого руководства ниже.

Если вы ищете что-то конкретное, вы можете посмотреть содержание ниже.

Краткое руководство по VBA While Loops

Ниже приведены примеры условий

Вы могли заметить x = 5 как условие. Его следует путать с х = 5, при использовании в качестве назначения.

В следующей таблице показано, как «=» используется в условиях и назначениях.

Формат цикла Do

Цикл Do можно использовать четырьмя способами, и это часто вызывает путаницу. Однако в каждом из этих четырех способов есть только небольшая разница.

Do всегда в начале первой строки, а Loop всегда в конце последней строки.

Мы можем добавить условие после любой строки.

Условию предшествует While или Until, которое дает нам эти четыре возможности

Давайте посмотрим на некоторые примеры, чтобы прояснить это.

Примеры цикла Do

Представьте, что вы хотите, чтобы пользователь ввел список элементов. Каждый раз, когда пользователь вводит элемент, вы печатаете его в «Immediate Window». Когда пользователь вводит пустую строку, вы хотите, чтобы приложение закрывалось.

В этом случае цикл For не подойдет, поскольку вы не знаете, сколько элементов будет вводить пользователь. Пользователь может ввести пустую строку первым или с сотой попытки. Для этого типа сценария вы бы использовали цикл Do.

Следующий код показывает это

Код входит в цикл и продолжается до тех пор, пока не достигнет строки «Loop While». На этом этапе он проверяет, оценивается ли условие как истинное или ложное.

Если условие оценивается как ложное, то код выходит из цикла и продолжается.
Если условие оценивается как истинное, то код возвращается к строке Do и снова проходит через цикл.
Разница между наличием условия на линии Do и на линии Loop очень проста.

Когда условие находится в строке Do, цикл может вообще не работать. Так что он будет работать ноль или более раз.
Когда условие находится на линии Loop, цикл всегда будет запущен хотя бы один раз. Так что он будет запущен один или несколько раз.

В нашем последнем примере условие находится в строке Loop, потому что мы всегда хотим получить хотя бы одно значение от пользователя. В следующем примере мы используем обе версии цикла. Цикл будет выполняться, пока пользователь не введет букву «н».

В приведенном выше примере оба цикла будут вести себя одинаково.

Однако, если мы установим для sCommand значение «н» до запуска цикла «Do While», код не войдет в цикл.

Второй цикл в вышеприведенном примере (то есть Loop While) всегда будет запускаться хотя бы один раз.

While против Until

При использовании Do Loop условию должно предшествовать Until или While.

Until и While, по сути, противоположны друг другу. Они используются в VBA аналогично тому, как они используются в английском языке.

  • Оставьте одежду, пока не пойдет дождь
  • Оставь одежду, пока не идет дождь
  • Оставайся в постели, пока не станет светло
  • Оставайся в постели, пока темно

Еще один пример:

  • повторять, пока число не станет больше или равно десяти
  • повторить пока счет меньше десяти

Как видите, использование Until и While — это просто противоположный способ написания одного и того же условия.

Примеры Until и While

Следующий код показывает циклы «While» и «Until» рядом. Как видите, единственная разница в том, что условие полностью изменено.

Примечание: знаки <> означают «не равно».

  • Первый цикл: запускается только в том случае, если sCommand не равен ‘н’.
  • Второй цикл: запускается только в том случае, если sCommand не равен ‘н’.
  • Третий цикл: будет запущен хотя бы один раз перед проверкой sCommand.
  • Четвертый цикл: будет запущен хотя бы один раз перед проверкой sCommand.

Пример: проверка объектов

Примером использования Until и While является проверка объектов. Когда объект не был назначен, он имеет значение Nothing.

Поэтому, когда мы объявляем переменную книги в следующем примере, она имеет значение Nothing, пока мы не назначим ее Workbook.

Противоположностью Nothing не является Nothing, что может сбить с толку.

Представьте, что у нас есть две функции: GetFirstWorkbook и GetNextWorkbook, которые возвращают некоторые объекты книги. Код будет печатать имя рабочей книги до тех пор, пока функции больше не вернут действительную рабочую книгу.

Вы можете увидеть пример кода здесь:

Написание этого кода с использованием Do While было бы более запутанным, так как условие Not Is Nothing

Это делает код более понятным, и наличие четких условий — всегда хорошо. Честно говоря, разница маленькая, и выбор между «While» и «Until» действительно сводится к личному выбору.

Цикл Exit Do

Мы можем выйти из любого цикла Do с помощью оператора Exit Do.

Следующий код показывает пример использования Exit Do

В этом случае мы выходим из цикла Do Loop, если ячейка содержит текст «Найдено».

While Wend

Этот цикл в VBA, чтобы сделать его совместимым со старым кодом. Microsoft рекомендует использовать циклы Do, поскольку они более структурированы.

Из MSDN: «Оператор Do… Loop обеспечивает более структурированный и гибкий способ выполнения циклов».

Формат цикла VBA While Wend

Цикл VBA While имеет следующий формат:

While Wend против Do

Разница между циклами VBA While и VBA Do заключается в следующем:

  1. While может иметь условие только в начале цикла.
  2. While не имеет версии Until.
  3. Не существует оператора для выхода из цикла While, как Exit For или Exit Do.

Условие для цикла VBA While такое же, как и для цикла VBA Do While. Два цикла в приведенном ниже коде работают точно так же.

Бесконечный цикл

Даже если вы никогда не писали код в своей жизни, я уверен, что вы слышали фразу «Бесконечный цикл». Это цикл, в котором условие никогда не будет выполнено. Обычно это происходит, когда вы забыли обновить счетчик.

Следующий код показывает бесконечный цикл

В этом примере cnt установлен в 1, но он никогда не обновляется. Поэтому условие никогда не будет выполнено — cnt всегда будет меньше 5.

В следующем коде cnt обновляется каждый раз, поэтому условие будет выполнено.

Как вы можете видеть, использование For Loop безопаснее для подсчета, поскольку оно автоматически обновляет счет в цикле. Ниже приведен тот же цикл с использованием For.

Это явно лучший способ сделать это. Цикл For устанавливает начальное значение, условие и счет в одну строку.

Конечно, можно использовать бесконечный цикл, используя For — это потребует немного больше усилий

Работа с бесконечным циклом

Когда у вас бесконечный цикл — VBA не выдаст ошибку. Ваш код будет продолжать работать, а редактор Visual Basic не будет отвечать.

Раньше вы могли выйти из цикла, просто нажав Ctrl и Break. В настоящее время разные ноутбуки используют разные комбинации клавиш. Полезно знать, как это настроено в вашем ноутбуке, чтобы в случае возникновения бесконечного цикла вы могли легко остановить код.

Вы также можете выйти из цикла, убив процесс. Нажмите Ctrl + Shift + Esc. На вкладке Процессы найдите Excel / Microsoft Excel. Щелкните правой кнопкой мыши по этому и выберите «Завершить процесс». Это закроет Excel, и вы можете потерять часть работы — так что гораздо лучше использовать Ctrl + Break или его эквивалент.

Использование функций Worksheet вместо циклов

Иногда вы можете использовать функцию листа вместо цикла.

Например, представьте, что вы хотите добавить значения в список ячеек. Вы можете сделать это с помощью цикла, но было бы более эффективно использовать функцию таблицы Sum. Это быстрее и экономит много кода.

Использовать функции рабочего листа очень просто. Ниже приведен пример использования Sum и Count.

В следующем примере используется цикл для выполнения того же действия. Как видите, это гораздо более длинный способ достижения той же цели.

Как зацикливать в excel без VBA или макросов?

Можно ли перебирать (цикл) группу строк в Excel без установки VBA или макросов? Google не принес ничего полезного.

Читать еще:  Как список в excel сделать по алфавиту список?

Как бы то ни было, мне придется повторить вышеуказанный код 40 раз в каждой ячейке, и у меня есть более 200 ячеек, которым нужен код. сопение

Я хорошо разбираюсь в PHP/SQL, но просто изучаю Excel.

Способ получения результатов вашей формулы должен начинаться с нового листа.

В ячейке A1 поместите формулу

Скопируйте эту ячейку до строки 40 В ячейке B1 поместите формулу

В ячейке B2 поместите формулу

Скопируйте эту ячейку до строки 40.

Значение, которое вы хотите, теперь находится в этом столбце в строке 40.

Не тот ответ, который вы хотите, но это самый быстрый способ добиться успеха, не создавая настраиваемую формулу, которая принимает диапазон и делает расчет (что было бы более интересно сделать).

Я просто искал что-то похожее:

Я хочу суммировать каждый нечетный столбец строки.

SUMIF имеет ДВА возможных диапазона, диапазон для суммирования и диапазон для рассмотрения критериев.

Эта функция будет учитывать, если ячейка в диапазоне B равна «= 1», она будет суммировать соответствующую ячейку A, только если она есть.

Чтобы получить «= 1» для возврата в диапазон B, я поместил это в B:

Затем автоматически заполняется, чтобы получить модуль для заполнения, вы можете поместить и вычислить критерии здесь, чтобы получить условия SUMIF или SUMIFS, которые вам нужно пройти по каждой ячейке.

Проще, чем ARRAY, и скрывает заднюю часть петель!

Собираюсь ответить на это сам (исправьте меня, если я ошибаюсь):

Невозможно выполнить итерацию по группе строк (например, массив) в Excel без установки VBA/макросов.

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

Совокупность результатов из этой таблицы в ячейку результатов.

200 таких ячеек, которые ссылаются на результаты, могут затем ссылаться на ячейку, которая содержит результаты агрегирования. В новейших версиях excel вы можете назвать ячейку результатов и ссылаться на нее таким образом, чтобы упростить чтение.

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

Создание одного цикла в Excel довольно просто. Это на самом деле делает работу для вас. Попробуйте это в новой книге

  • Введите «1» в A1
  • Введите «= A1 + 1» в A2

A3 автоматически будет «= A2 + 1» при перетаскивании. Первые шаги не обязательно должны быть явными. Excel автоматически распознает шаблон и подсчет, если вы просто поместите «2» в A2, но если мы хотим, чтобы B1-B5 был «100», а B5-B10 равным «200» (подсчет таким же образом), вы можете понять, почему зная, как это делать прямо. В этом случае вы просто вводите:

  1. «100» в B1, перетащите на B5 и
  2. «= B1 + 100» в B6

B7 автоматически будет «= B2 + 100» и т.д. при перетаскивании, поэтому в основном он увеличивается каждые 5 строк бесконечно. Чтобы сделать цикл чисел 1-5 в столбце A:

  1. Введите «= A1» в ячейке A6. При перетаскивании автоматически будет «= A2» в ячейке A7 и т.д. Из-за того, как Excel делает вещи.

Итак, теперь у нас есть столбец A, повторяющий числа 1-5, в то время как столбец B увеличивается на 100 каждые 5 ячеек. Вы можете сделать повторение столбца B, например, номера 100-900, используя тот же метод, что и с столбец А, как способ создания, например, каждой возможной комбинации с несколькими переменными. Перетащите столбцы, и они сделают это бесконечно. Я явно не рассматриваю данный сценарий, но если вы выполните шаги и поймете их, концепция должна дать вам ответ на проблему, которая включает в себя добавление большего количества столбцов и взаимодействие или использование их в качестве ваших переменных.

@Nat дал хороший ответ. Но поскольку нет способа сократить код, почему бы не использовать контактен для «генерации» необходимого вам кода. Это работает для меня, когда я ленивый (при наборе всего кода в ячейке).

Поэтому нам нужно просто определить шаблон> использовать Excel для построения шаблона ‘структура’> добавить «=» и вставить его в нужную ячейку.

Например, вы хотите достичь (я имею в виду, введите в ячейку):

Я не набрал его, я просто использовал символ «&» для объединения упорядоченной ячейки в Excel (другой файл, а не файл, над которым мы работаем).

  • Введите часть 1 до А1, часть 3 до С1, часть до E1.
  • Введите «= A1» в A2, «= C1» в C2, «= E1» в E2.
  • Введите «= B1 + 1» в B2, «= D1 + 1» в D2.
  • Введите «= A2 & B2 & C2 & D2 & E2» в G2
  • Введите «= I1 & G2» в I2

Теперь выберите A2: I2 и перетащите его вниз. Обратите внимание, что число добавило инкремент на строку, и сгенерированный текст объединяется, ячейка за ячейкой и строка за строкой.

  • Скопируйте содержание I41,
  • вставьте его куда-нибудь, добавьте «=» впереди, удалите лишнюю & и заднюю часть.

Результат = код, как вы и предполагали.

Я использую Excel/OpenOfficeCalc, чтобы помочь мне генерировать код для моих проектов. Работает для меня, надеюсь, это помогает другим. (:

Макросы в excel для экономиста. Цикл For и проверка условия в цикле

Немногие знают, что первая версия популярного продукта Microsoft Excel появилась в 1985 году. С тех пор он пережил несколько модификаций и востребован у миллионов пользователей по всему миру. При этом многие работают лишь с малой толикой возможностей этого табличного процессора и даже не догадываются, как им могло бы облегчить жизнь умение программирования в Excel.

Что такое VBA

Программирование в Excel осуществляется посредством языка программирования Visual Basic for Application, который изначально встроен в самый известный табличный процессор от Microsoft.

К его достоинствам специалисты относят сравнительную легкость освоения. Как показывает практика, азами VBA могут овладеть даже пользователи, которые не имеют навыков профессионального программирования. К особенностям VBA относится выполнение скрипта в среде офисных приложений.

Недостатком программы являются проблемы, связанные с совместимостью различных версий. Они обусловлены тем, что код программы VBA обращается к функциональным возможностям, которые присутствуют в новой версии продукта, но отсутствуют в старой. Также к минусам относят и чрезмерно высокую открытость кода для изменения посторонним лицом. Тем не менее Microsoft Office, а также IBM Lotus Symphony позволяют пользователю применять шифрование начального кода и установку пароля для его просмотра.

Объекты, коллекции, свойства и методы

Именно с этими понятиями нужно разобраться тем, кто собирается работать в среде VBA. Прежде всего необходимо понять, что такое объект. В Excel в этом качестве выступают лист, книга, ячейка и диапазон. Данные объекты обладают специальной иерархией, т.е. подчиняются друг другу.

Главным из них является Application, соответствующий самой программе Excel. Затем следуют Workbooks, Worksheets, а также Range. Например, для обращения к ячейке A1 на конкретном листе следует указать путь с учетом иерархии.

Что касается понятия «коллекция», то это группа объектов того же класса, которая в записи имеет вид ChartObjects. Ее отдельные элементы также являются объектами.

Следующее понятие — свойства. Они являются необходимой характеристикой любого объекта. Например, для Range — это Value или Formula.

Методы — это команды, показывающие, что требуется сделать. При написании кода в VBA их необходимо отделять от объекта точкой. Например, как будет показано в дальнейшем, очень часто при программировании в «Эксель» используют команду Cells(1,1).Select. Она означает, что необходимо выбрать ячейку с координатами

Вместе с ней нередко используется Selection.ClearContents. Ее выполнение означает очистку содержимого выбранной ячейки.

Как начать

Затем необходимо перейти в приложение VB, для чего достаточно воспользоваться комбинацией клавиш «Alt» и «F11». Далее:

  • в строке меню, расположенном в верхней части окна, нажимают на иконку рядом с иконкой Excel;
  • выбирают команду Mudule;
  • сохраняют, нажав на иконку с изображением ;
  • пишут, скажем так, набросок кода.

Он выглядит следующим образом:

Обратите внимание, что строка «»Наш код» будет выделена другим цветом (зеленым). Причина в апострофе, поставленном в начале строки, который обозначает, что далее следует комментарий.

Теперь вы можете написать любой код и создать для себя новый инструмент в VBA Excel (примеры программ см. далее). Конечно, тем, кто знаком с азами Visual Basic, будет намного проще. Однако даже те, кто их не имеет, при желании смогут освоиться достаточно быстро.

Макросы в Excel

За таким названием скрываются программы, написанные на языке Visual Basic for Application. Таким образом, программирование в Excel — это создание макросов с нужным кодом. Благодаря этой возможности табличный процессор Microsoft саморазвивается, подстраиваясь под требования конкретного пользователя. Разобравшись с тем, как создавать модули для написания макросов, можно приступать к рассмотрению конкретных примеров программ VBA Excel. Лучше всего начать с самых элементарных кодов.

Читать еще:  Поиск по листам в excel как сделать

Задача: написать программу, которая будет копировать значение содержимое одной ячейки и затем записывать в другую.

  • открывают вкладку «Вид»;
  • переходят на пиктограмму «Макросы»;
  • жмут на «Запись макроса»;
  • заполняют открывшуюся форму.

Для простоты в поле «Имя макроса» оставляют «Макрос1», а в поле «Сочетание клавиш» вставляют, например, hh (это значит, что запустить программку можно будет блиц-командой «Ctrl+h»). Нажимают Enter.

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

  • вновь переходят на строку «Макросы»;
  • в списке выбирают «Макрос 1»;
  • нажимают «Выполнить» (то же действие запускается начатием сочетания клавиш «Ctrl+hh»).

В результате происходит действие, которое было осуществлено в процессе записи макроса.

Имеет смысл увидеть, как выглядит код. Для этого вновь переходят на строку «Макросы» и нажимают «Изменить» или «Войти». В результате оказываются в среде VBA. Собственно, сам код макроса находится между строками Sub Макрос1() и End Sub.

Если копирование было выполнено, например, из ячейки А1 в ячейку C1, то одна из строк кода будет выглядеть, как Range(“C1”).Select. В переводе это выглядит, как «Диапазон(“C1”).Выделить», иными словами осуществляет переход в VBA Excel, в ячейку С1.

Активную часть кода завершает команда ActiveSheet.Paste. Она означает запись содержания выделенной ячейки (в данном случае А1) в выделенную ячейку С1.

Циклы VBA помогают создавать различные макросы в Excel.

Циклы VBA помогают создавать различные макросы. Предположим, что имеется функция y=x + x 2 + 3x 3 — cos(x). Требуется создать макрос для получения ее графика. Сделать это можно только, используя циклы VBA.

За начальное и конечное значение аргумента функции берут x1=0 и x2=10. Кроме того, необходимо ввести константу — значение для шага изменения аргумента и начальное значение для счетчика.

Все примеры макросов VBA Excel создаются по той же процедуре, которая представлена выше. В данном конкретном случае код выглядит, как:

Do While x1 0 Then Cells(1, 1).Value = 1

Процесс выполнения всех входящих структуру цикла операторов (тело цикла) один раз называется итерацией (iteration) цикла. Некоторые циклы реализуются так, что тело цикла всегда выполняется заданное количество раз. Такие структуры циклов называются циклами с фиксированным числом итераций (fixed iteration). В других типах циклов тело цикла повторяется переменное количество раз в зависимости от некоторого набора условий. Поскольку количество повторений этих циклов является неопределенным, такие циклы называются неопределенными циклами (indefinite loops) [1] .

Оператор цикла с параметром For. Next. К циклам с фиксированным числом итераций относится цикл For. Next. Он используется, если действие или ряд действий нужно повторить заданное количество раз, известное до начала выполнения цикла.

Синтаксис данного цикла следующий:

For счетчик = начало То конец [Step шаг] блок_ операторов_1

Пара For. Next определяет начало и конец цикла. Блок_операторов_1 и блок_операторов_2 между For и Next составляют тело цикла.

Счетчик — это числовая переменная или константа (иногда называется счетчиком цикла), которая не может быть элементом массива или элементом пользовательского типа данных. Начало (начальное значение) и шаг — это арифметические выражения (в частном случае — константы или переменные). Они определяют значение счетчика перед очередным выполнением тела цикла. Перед первым выполнением тела цикла счетчик равен начальному значению. Перед вторым выполнением тела цикла счетчик увеличивается на единицу (если шаг не задан) или на шаг (если шаг задан) и т.д. Конец (конечное значение) — это арифметическое выражение (в частном случае — константа или переменная). Определяет окончание работы цикла. Цикл выполняется до тех пор, пока значение счетчик не выйдет за границу конечного значения.

Exit For может находиться в любом месте между For и Next, используется для досрочного прекращения выполнения цикла (управление передается оператору, следующему за Next). Применяется обычно в условном операторе, проверяющем условие выхода из цикла, например, в случае ошибки. Причем, если осуществляется досрочное прекращение цикла, то блок_опе- раторов_1 выполняется в очередной раз, а блок_операторов_2 — нет.

После завершения цикла управление передается оператору, следующему за Next.

Дополнительные достаточные условия для выполнения цикла:

  • шаг >=0 и значение счетчика = конечное значение.

Заполнение массива символами таблицы ASCII Dim I As Integer

Dim C(255) As String*l ‘массив из 256 строк For I = 0 To 255

С (I) = Chr (I) ‘стандартная функция Chr возвращает символ no его коду

Досрочное прерывание цикла

Dim j As Integer, Sum As Single

For j = 1 To 10 Sum = Sum + j

If Sum > 6 Then Exit For ‘выход из цикла, если Sum > 6

Создать программу, которая вычисляет две суммы чисел от 1 до 10 (первая — сумма нечетных чисел, вторая — сумма четных чисел). При реализации использовать инструкцию For, результат вывести в стандартное диалоговое окно MsgBox. Последовательность выполнения примера 4.4.

  • 1. Активизируйте приложение MS Excel, создайте (сохраните) новую книгу под именем MyExFor.
  • 2. Войдите в редактор VBA (Alt + FI 1).
  • 3. Правой кнопкой мыши выделите VBAProject(MvExFor) и выберите команду Insert —> Module из строки меню или контекстного меню (см. рис. 4.1).
  • 4. В окне проекта дважды щелкните по объекту Module 1 (см. рис. 4.2).
  • 5. В окне редактора VBE необходимо ввести приведенный в листинге 4.4 исходный текст.

Dim j As Integer, Suml As Integer, Sum2 As Integer

For j = 1 To 10 Step 2

For j = 10 To 1 Step -2 Sum2 = Sum2 + j Next j

MsgBox «Сумма нечетных чисел от 1 до 10 равна » & Suml & vbCr & «Сумма четных чисел от 1 до 10 равна » & Sum2 End Sub

6. Откомпилируйте программу и запустите ее на выполнение. Результат выполнения процедуры приведен на рис. 4.8.

Внимание! Здесь применяется два варианта цикла For. Next с использованием шага цикла, отличного от единицы: при уменьшении счетчика цикла For. Next цикл выполняется, пока переменная счетчика больше или равна конечному значению, а когда счетчик цикла увеличивается, цикл выполняется, пока переменная счетчика меньше или равна конечному значению.

Рис. 4.8. Результат работы примера 4.4

Стандартная константа vbCr — символ возврата каретки.

Цикл Do. Loop. Рассмотрим неопределенные циклы. Такие циклы применяются в том случае, когда число повторений заданного блока операторов (тело цикла) заранее неизвестно.

Создание неопределенного цикла можно осуществить двумя основными способами. В одном случае цикл можно реализовать так, что некоторое условие (детерминант цикла) будет проверяться перед выполнением цикла (цикл с предусловием). В другом случае цикл можно реализовать таким образом, что условие детерминанта цикла будет проверяться после выполнения операторов в цикле (цикл с постусловием).

При использовании первого типа неопределенного цикла (цикла с предусловием) тело цикла либо выполнится много раз, либо не выполнится вообще (если проверяемое условие не выполняется). Синтаксис данной конструкции следующий:

[ блок_ опера торов_ 2 ]

При использовании второго неопределенного цикла (цикла с постусловием) тело цикла будет выполнен хотя бы один раз. Синтаксис данной конструкции следующий:

В этих конструкциях: Блок_операторов_1 и блок_операторов_2 между Do и Loop составляют тело цикла; Логическое_выражение условие, значение которого проверяется на каждом шаге цикла и влияет на окончание выполнения тела цикла; While определяет выполнение тела цикла, пока значение логическое_выражение равно True; Until определяет выполнение тела цикла, пока значение логического выражения равно значению False; Exit Do используется для досрочного прекращения выполнения цикла (см. Exit For в подпараграфе 4.6.3).

Положение « логическое_выражение» в конструкции Do. Loop определяет, когда производится проверка условия — в начале или в конце цикла. В первых двух конструкциях проверка условия производится в начале выполнения цикла, а в последних двух конструкциях — в конце.

Для завершения работы цикла Do. Loop в его теле необходимо реализовать ситуацию, меняющую знамение логическое_выражение. В противном случае может произойти «зацикливание» цикла (т.е. он будет выполняться бесконечно).

Пример: в результате выполнения кода в обоих вариантах значение переменной Sum будет равно 8.

Вариант реализации с помощью цикла с предусловием Dim j As Integer, Sum As Single Sum=2 : j=l Do While Sum 7 ‘конец цикла

Создать программу, которая для заданного п (п > 2) создает динамический массив, содержащий первые п чисел Фибоначчи [2] . При реализации использовать инструкцию Do Loop.

Формально последовательность чисел Фибоначчи /;> задается линейным рекуррентным соотношением: F = 0, Fj = 1, Fw = Fn_< + Fn_2 n>2,ne Z (например, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 . ).

Последовательность выполнения примера 4.5.

  • 1. Для активной книги с именем MyExFib приложения MS Excel войдите в редактор VBA (Alt + F11).
  • 2. В окне редактора VBE необходимо ввести приведенный в листинге 4.5 исходный текст.

Dim arrFibO As Long ‘описание типа массива Dim n As Integer, i As Integer Dim SFib As String n = 10

Re Dim arrFib(n) ‘ выделение памяти и размерности массива

  • [1] Фризен И. Г. Офисное программирование.
  • [2] Аракелян Г. Математика и история золотого сечения ; Кнут Д. Искусство программирования. Т. 1. Основные алгоритмы.
Читать еще:  Как сделать частоту в excel?

НЕ ВОЛНУЙТЕСЬ, Я СЕЙЧАС ВСЕ ОБЪЯСНЮ!

Следите через RSS

Подписаться на RSS

Задаем вопросы

Комментарии на сайте

Использование макросов Microsoft Excel для создания циклов

Использование макросов циклов

При обработке данных бывают очень полезны макросы, называемые циклами, которые автоматически выполняют одни и те же действия повторно. Пользователю, работающему с большими массивами данных или с массивами разных размеров, циклы позволяют сэкономить немало времени и сил.

Цикл Do…Loop

В цикле Do…Loop производится подсчет строк в диапазоне данных до обнаружения пустой строки.

Предположим, вы хотите подсчитать количество строк в диапазоне данных, который может быть небольшим, а может — весьма солидным. Для этого следует использовать цикл Do…Loop. Он выполняет заданное действие столько раз, сколько необходимо. При этом подсчитывается число всех строк, найденных в диапазоне. Или предположим, что требуется выполнить одно действие в двух диапазонах данных, содержащих различное число строк. И в этом случае будет полезен цикл Do…Loop. Он выполнится столько раз, сколько необходимо для каждого из диапазонов. Как цикл определит, сколько именно раз следует повторить действие? Из заданных вами условий. Повтор прекратится, как только обнаружится определенный фрагмент данных, например пустая строка или некий текст.

В качестве условия выхода из цикла Do…Loop применяется условие While или условие Until. Цикл выполняется, пока заданное утверждение остается истинным (While) или пока оно не становится истинным (Until). Так, чтобы задать цикл, прекращающийся при обнаружении пустой ячейки в первом столбце, следует использовать условие While:

В соответствии с этим условием While цикл выполняется до тех пор, пока обрабатываемая им ячейка не окажется пустой. Обрабатываемая строка задана номером x, и первая ячейка этой строки имеет координаты (x,1). Комбинация знаков <> означает «не равно». Кавычки, между которыми ничего нет, обозначают пустую ячейку.

Если цикл требуется выполнять до обнаружения ячейки, содержащей число 365, используйте условие Until. В любом случае именно вы предоставляете программе сведения, помогающие ей определить, когда следует выйти из цикла.

Цикл For Each…Next

Цикл For Each…Next позволяет выделить более темным шрифтом каждое слово «ОК» в тексте выбранного фрагмента.

Цикл For Each…Next используется для выполнения некоторого действия над каждой ячейкой диапазона данных. Предположим, например, что в выделенном диапазоне требуется повсюду изобразить слово «ОК» более темным шрифтом по сравнению с остальным текстом. Код будет выглядеть примерно следующим образом:

Здесь «MyCell» указывает текущую ячейку, обрабатываемую в цикле, а «For Each» означает, что в цикле перебираются все ячейки выделенного фрагмента. При обнаружении ячейки, содержащей только слово «ОК», это слово выделяется темным шрифтом. (Внешний вид текста контролируется свойством Font, а атрибут Bold означает полужирное начертание.)

Вложенные циклы

Циклы Do…Loop и For Each…Next весьма эффективны в простейших случаях. Теперь мы немного повысим уровень сложности, перейдя к рассмотрению вложенных циклов. Они используются, когда необходимо выполнить какое-либо действие в нескольких диапазонах данных или несколько раз в одном диапазоне данных. Аналогией вложенных циклов может служить вращение Земли вокруг Солнца. Один полный оборот вокруг Солнца (год) можно считать внешним циклом, а один оборот Земли вокруг своей оси (сутки) — внутренним циклом, вложенным во внешний цикл. В течение каждого года выполняется 365 внутренних циклов, и каждое 1 января внешний цикл повторяется:

Разумеется, этот код не будет выполняться в Excel, но он наглядно показывает, что каждый большой цикл (оборот вокруг Солнца) включает 365 маленьких циклов (оборотов Земли вокруг своей оси).

Или же рассмотрим процедуру, реально выполнимую в Excel. Предположим, что необходимо удалить с листа лишние повторяющиеся строки. Для этого достаточно сравнить первую строку с каждой последующей и удалить все дубликаты, если они будут обнаружены, затем сравнить вторую строку с каждой последующей и т. д. Внешний цикл обеспечивает повторение этого процесса для каждой строки. Во внутреннем цикле будет производиться фактическое сравнение и удаление строк.

Использование свойства Cells в циклах

Столбцы обозначаются числами, а не буквами.

Данные, содержащиеся в ячейке, можно получать в коде макроса цикла двумя разными способами. Один из них предусматривает использование свойства Cells, а второй — использование свойства Range. В VBA обычно бывает легче и удобнее работать со свойством Cells, поскольку изменять описываемые им значения проще. Свойство Range идентифицирует строки и столбцы на листе с помощью чисел и букв, а в свойстве Cells и строки, и столбцы обозначаются числами. Добавление +1 к таким числам позволяет легко переходить в цикле от строки к строке и от столбца к столбцу, а вот реализовать в коде переход от одной буквы к следующей за ней не так просто.

Совет. При необходимости в электронной таблице можно задать отображение номеров столбцов вместо буквенных обозначений. Выберите в меню Сервис команду Параметры и перейдите на вкладку Общие. Установите флажок «Стиль ссылок R1C1». Если позже потребуется вернуть прежние обозначения, снимите этот флажок.

Упражнение

Для выполнения упражнения загрузите файл macros1

Упражнение 1. Подсчет с использованием цикла Do…Loop

Цикл Do…Loop будет использован для подсчета количества строк в диапазоне данных.

  1. Откройте файл практического занятия, выделите код в первом текстовом поле листа (от строки Sub CountRows() до End Sub) и скопируйте его в буфер обмена.Совет. После запуска редактора Visual Basic данные инструкции будут закрыты новым окном. Чтобы инструкции были всегда доступны, напечатайте эту страницу (щелкните правой кнопкой мыши и выберите в контекстном меню команду Печать).В этом фрагменте кода переменной x присваивается номер текущей обрабатываемой строки; x + 1 обозначает следующую строку. Переменной z присваивается текущее число подсчитанных строк, начиная с 0, когда еще ничего не было сосчитано. Цикл обрабатывает поочередно каждую строку, пока не дойдет до пустой строки. При каждом переходе к следующей строке число строк, записанное в переменной z, увеличивается на 1. В итоге подсчитанное количество строк выводится в сообщении; это значение берется из переменной z.Значение z отображается в сообщении в окружении двух текстовых фрагментов. Все это объединяется в одну фразу с помощью знаков &.
  2. Щелкните вне текстового поля с кодом и выделите ячейку C3 (или, если включен стиль ссылок R1C1, выделите строку 3 и столбец 3).
  3. Откройте редактор Visual Basic и вставьте новый модуль.Как это сделать? Выделите в меню Сервис пункт Макрос и выберите команду Редактор Visual Basic. В меню редактора Insert выберите команду Module.
  4. Вставьте код, скопированный на шаге 1, в новый модуль.
  5. Щелкните в строке Sub CountRows() и нажмите клавишу F5, чтобы выполнить макрос.
  6. Цикл Do…Loop выполняет необходимые действия, и на экране появляется сообщение о том, что в заданном диапазоне содержится шесть строк.
  7. Нажмите кнопку ОК, чтобы закрыть окно сообщения, и вернитесь в Excel, выбрав в меню File команду Close and Return to Microsoft Excel.

Примечание. В этом упражнении переменная z хранит текущее число строк, x — текущий номер строки, а y — номер столбца (в данном случае это номер 3, что соответствует столбцу C).

Упражнение 2. Подсчет ячеек с использованием цикла For Each…Next

  1. Выделите код во втором текстовом поле листа (начиная со строки Sub CountCells() и до End Sub) и скопируйте его в буфер обмена.Подсказка. Чтобы увидеть второе текстовое поле, начинающееся со строки 27, возможно, потребуется прокрутить лист.В этом фрагменте кода переменной z присваивается подсчитанное количество строк, начиная с 0, когда еще ничего не было сосчитано. С помощью этого кода поочередно перебираются все ячейки выделенного диапазона. При каждом переходе к следующей ячейке их общее число, записываемое в переменной z, увеличивается на 1. В итоге подсчитанное количество ячеек выводится в сообщении; это значение берется из переменной z.
  2. Щелкните вне текстового поля с кодом и выделите диапазон C3:D8, значения от «Светлана» до «Шашков». Если включен стиль ссылок R1C1, выделите фрагмент со строки 3, столбца 3 до строки 8, столбца 4.
  3. Откройте редактор Visual Basic и вставьте новый модуль.Подсказка. О том, как это сделать, см. в первом упражнении.
  4. Вставьте код, скопированный на шаге 1, в новый модуль.
  5. Щелкните в строке Sub CountCells() и нажмите клавишу F5.
  6. Готово! Появляется сообщение о том, что в выделенном фрагменте содержится 12 ячеек.
  7. Нажмите кнопку ОК, чтобы закрыть окно сообщения. Закройте редактор Visual Basic и книгу. Будет предложено сохранить книгу; можете сделать это, если хотите вернуться к ней позже.

В ходе следующего практического занятия вы займетесь вложенными циклами. Пока же, если у вас сформировалось общее представление о том, как работают эти макросы циклов, этого более чем достаточно.

Примечание. Если появится сообщение Microsoft Visual Basic «Compile error» (ошибка компиляции), не беспокойтесь. Это просто означает, что код в модуле не в точности совпадает с кодом, который было предложено скопировать и вставить. Удалите код из модуля и скопируйте его туда снова.

Понравился материал? Подпишитесь на обновления сайта.

Ссылка на основную публикацию
Adblock
detector