Использование for do оператора в excel

На чтение 13 мин. Просмотров 26.5k.

VBA While Loop

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

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

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

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

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

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

Содержание

  1. Краткое руководство по VBA While Loops
  2. Введение
  3. Цикл For против цикла Do While
  4. Условия
  5. Формат цикла Do
  6. Цикл Exit Do
  7. While Wend
  8. Бесконечный цикл
  9. Использование функций Worksheet вместо циклов
  10. Резюме

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

Формат цикла Описание Пример
Do While … Loop Запускается 0 или более раз, пока условие выполняется Do While result = «Верно»
Loop
Do … Loop While Запускается 1 или более раз, пока условие выполняется Do 
Loop While result = «Верно»
Do Until … Loop Запускается 0 или более раз, пока условие не будет выполнено Do Until result <> «Верно»
Loop
Do … Until Loop Запускается 1 или более раз, пока условие не будет выполнено Do 
Loop Until result <> «Верно»
While … Wend
R
Запускается 0 или более раз, пока условие истинно.
Примечание: этот цикл считается устаревшим.
While result = «Верно»
Wend
Exit the Do Loop Завершает Do Do While i < 10
   i = GetTotal
   If i < 0 Then
      Exit Do
   End If
Loop

Введение

Если вы никогда ранее не использовали циклы, тогда вы можете прочитать «Что такое циклы и зачем они вам нужны» из моего поста в журнале For Loop.

Я собираюсь сосредоточиться в основном на Do Loop в этой статье. Как я упоминал выше, мы видели, что цикл While Wend считается устаревшим. Для полноты информации я все равно его включил в эту статью.

Итак, во-первых, зачем нам нужны циклы Do While, когда у нас уже есть циклы For?

Цикл For против цикла Do While

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

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

' запускается 5 раз
For i = 1 To 5

' запускается один раз для каждого элемента коллекции
For i = 1 To coll.Count

' запускается один раз для каждого элемента в arr
For i = LBound(arr) To coll.lbound(arr)

' запускается один раз для каждого значения от 1 до значения в lastRow
For i = 1 To lastRow

' запускается один раз для каждого элемента в коллекции
For Each s In coll

Цикл Do другой. Он работает:

  • В то время как условие верно
  • Пока условие не будет выполнено

Другими словами, количество циклов в большинстве случаев не имеет значения.

Итак, что такое условие и как мы их используем?

Условия

Условие — это утверждение, которое оценивается как истинное или ложное. Они в основном используются с операторами Loops и If. При создании условия вы используете такие знаки, как >, <, <>,> =, =.

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

Условие Истина, когда…
x < 5 x меньше 5
x <= 5 x меньше либо равен 5
x > 5 x больше 5
x >= 5 x больше либо равен 5
x = 5 x равен 5
x <> 5 x не равен 5
x > 5 And x < 10 x больше 5 И меньше 10
x = 2 Or x >10 x равен 2 ИЛИ больше 10
Range(«A1») = «Иван» Ячейка A1 содержит текст «Иван»
Range(«A1») <> «Иван» Ячейка A1 не содержит текст «Иван»

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

Например

' означает: значение 6 будет храниться в х
x = 6

' означает: х равен 6?
If x = 6

' означает: х равен 6?
Do While x = 6

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

Использование «=» Тип Имеется в виду
Loop Until x = 5 Условие x равен 5?
Do While x = 5 Условие x равен 5?
If x = 5 Then Условие x равен 5?
For x = 1 To 5 Присваивание Установите значение x = 1, затем = 2 и т.д.
x = 5 Присваивание Установите значение x=5
b = 6 = 5 Присваивание и
условие
Присвойте b
результату условия
6 = 5
x = MyFunc(5,6) Присваивание Присвойте х
значение,
возвращаемое
функцией

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

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

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

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

Do [условие]
Loop

Do 
Loop [условие]

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

Do While [условие]
Loop

Do Until [условие]
Loop

Do 
Loop While [условие]

Do 
Loop Until [условие]

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

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

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

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

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

 Dim sCommand As String

    Do
        ' Получить пользовательский ввод
        sCommand = InputBox("Пожалуйста, введите элемент")

        ' Печать в Immediate Window (Ctrl + G для просмотра)
        Debug.Print sCommand

    Loop While sCommand <> ""

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

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

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

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

Sub GetInput()

    Dim sCommand As String

    ' Условие в начале
    Do While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop

    ' Условие в конце
    Do
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Loop While sCommand <> "н"

End Sub

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

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

Sub GetInput2()

    Dim sCommand As String
    sCommand = "н"

    ' Цикл не будет работать, поскольку команда "н"
    Do Whilel sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop

    ' Цикл все равно будет запущен хотя бы один раз
    Do
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Loop While sCommand <> "н"

End Sub

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

While против Until

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

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

Например:

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

Другой пример:

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

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

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

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

Примеры Until и While

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

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

Sub GetInput()

    Dim sCommand As String

    ' Условие в начале
    Do Until sCommand = "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop

    Do While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop

    ' Условие в конце
    Do
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Loop Until sCommand = "н"

    Do
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Loop While sCommand <> "н"

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

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

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

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

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

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

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

Dim wrk As Workbook
    Set wrk = GetFirstWorkbook()

    Do Until wrk Is Nothing
        Debug.Print wrk.Name
        Set wrk = GetNextWorkbook()
    Loop

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

Dim wrk As Workbook
    Set wrk = GetFirstWorkbook()

    Do While Not wrk Is Nothing
        Debug.Print wrk.Name
        Set wrk = GetNextWorkbook()
    Loop

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

Цикл Exit Do

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

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

Do While i < 1000
     If Cells(i,1) = "Найдено" Then 
         Exit Do
     End If
     i = i + 1
Loop 

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

While Wend

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

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

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

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

While <Условие>
Wend

While Wend против Do

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

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

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

Sub GetInput()

    Dim sCommand As String

    Do While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop

    While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Wend

End Sub

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

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

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

Dim cnt As Long
    cnt = 1

    'это бесконечный цикл
    Do While cnt <> 5

    Loop

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

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

Dim cnt As Long
    cnt = 1

    Do While cnt <> 5
        cnt = cnt + 1
    Loop

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

Dim i As Long
    For i = 1 To 4

    Next i

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

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

 Dim i As Long
    ' Бесконечный цикл
    For i = 1 To 4
        ' i никогда не достигнет 4
        i = 1
    Next i

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

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

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

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

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

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

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

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

Sub WorksheetFunctions()

    Debug.Print WorksheetFunction.Sum(Range("A1:A10"))

    Debug.Print WorksheetFunction.Count(Range("A1:A10"))

End Sub

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

Sub SumWithLoop()

    Dim total As Long, count As Long
    Dim rg As Range
    For Each rg In Range("A1:A10")
        ' Total
        total = total + rg
        ' Count
        If rg <> "" Then
            count = count + 1
        End If
    Next rg

    Debug.Print total
    Debug.Print count

End Sub

Резюме

Цикл Do While

  • Цикл Do можно использовать 4 способами.
  • Его можно использовать в начале или в конце, Do While .. Loop, Do … Loop While
  • Может использоваться с Until в начале или в конце, Do Until .. Loop, Do … Loop Until
  • While и Until используют противоположные условия друг к другу.
  • Бесконечный цикл происходит, если ваше условие выхода никогда не будет выполнено.
  • Иногда использование функции рабочего листа более эффективно, чем использование цикла.

Цикл While Wend

  • Цикл Wend Wend устарел, и вы можете вместо этого использовать цикл Do.

Содержание

  • 1 Оператор цикла «For» в Visual Basic
    • 1.1 Цикл «For … Next»
    • 1.2 Цикл «For Each»
    • 1.3 Оператор прерывания цикла «Exit For»
  • 2 Цикл «Do While» в Visual Basic
  • 3 Цикл «Do Until» в Visual Basic

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

Excel

таблицей БЕЗ макросов и дополнительных модулей (функций пользователя).

Стандартный набор функций Excel не поддерживает ничего похожего на циклы, однако выход нашелся – использование циклических ссылок и итераций.

Первый шаг, чтобы начать работать с циклическими ссылками – это разрешить итеративные вычисления в Excel. В версии Microsoft Office XP это делается в разделе меню «Сервис – Параметры»:

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

В открывшемся окне активируем соответствующий флажок:

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

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

!Информация: В Excel 2007 включение итеративных вычислений производится в пункте меню «Файл – Параметры Excel» в разделе «Формулы».

Рассмотрим пример использования итеративных вычислений в виде цикла.

Впишите в ячейку А1 формулу:

Если значение предельного числа итераций равно 100, то результатом вычислений в ячейке А1 будет равно 100. Теперь изменим формулу:

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

Как видите число итераций мы ограничили числом в ячейке А2, а именно 10. Чтобы проиллюстрировать, как происходят итерации, добавим формулу в ячейку B2:

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

Как видите, каждый этап итерации (новое значение А1) добавляется к ячейке B1 до тех пор пока происходят итерации.

!Замечание: Возможно, результат в B2 будет не таким – для того, чтобы исправить это сделайте следующее: после ввода формулы в ячейку B1 перейдите в ячейку A1, установите курсор в поле редактирования формулы и нажмите Enter – произойдет пересчет итераций. Для корректной работы итераций необходимо задать ряд дополнительных условий, ограничивающих их количество и задающее условие сброса текущего значения поля в исходное значение. Пересчет всех ячеек с циклическими ссылками происходит каждый раз при изменении ячеек, от которых они зависят.

!Дополнительные ссылки:

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

К циклам VBA относятся:

  • Цикл For
  • Цикл Do While
  • Цикл Do Until

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

Оператор цикла «For» в Visual Basic

Структура оператора цикла For в Visual Basic может быть организована в одной из двух форм: как цикл For … Next или как цикл For Each.

Цикл «For … Next»

Цикл For … Next использует переменную, которая последовательно принимает значения из заданного диапазона. С каждой сменой значения переменной выполняются действия, заключённые в теле цикла. Это легко понять из простого примера:

For i = 1 To 10     Total = Total + iArray(i)  Next i

В этом простом цикле For … Next используется переменная i, которая последовательно принимает значения 1, 2, 3, … 10, и для каждого из этих значений выполняется код VBA, находящийся внутри цикла. Таким образом, данный цикл суммирует элементы массива iArray в переменной Total.

В приведённом выше примере шаг приращения цикла не указан, поэтому для пошагового увеличения переменной i от 1 до 10 по умолчанию используется приращение . Однако, в некоторых случаях требуется использовать другие значения приращения для цикла. Это можно сделать при помощи ключевого слова Step, как показано в следующем простом примере.

For d = 0 To 10 Step 0.1     dTotal = dTotal + d  Next d

Так как в приведённом выше примере задан шаг приращения равный 0.1, то переменная dTotal для каждого повторения цикла принимает значения 0.0, 0.1, 0.2, 0.3, … 9.9, 10.0.

Для определения шага цикла в VBA можно использовать отрицательную величину, например, вот так:

For i = 10 To 1 Step -1     iArray(i) = i  Next i

Здесь шаг приращения равен -1, поэтому переменная i с каждым повторением цикла принимает значения 10, 9, 8, … 1.

Цикл «For Each»

Цикл For Each похож на цикл For … Next, но вместо того, чтобы перебирать последовательность значений для переменной-счётчика, цикл For Each выполняет набор действий для каждого объекта из указанной группы объектов. В следующем примере при помощи цикла For Each выполняется перечисление всех листов в текущей рабочей книге Excel:

Dim wSheet As Worksheet    For Each wSheet in Worksheets     MsgBox "Найден лист: " & wSheet.Name  Next wSheet

Оператор прерывания цикла «Exit For»

Оператор Exit For применяется для прерывания цикла. Как только в коде встречается этот оператор, программа завершает выполнение цикла и переходит к выполнению операторов, находящихся в коде сразу после данного цикла. Это можно использовать, например, для поиска определённого значения в массиве. Для этого при помощи цикла просматривается каждый элемент массива. Как только искомый элемент найден, просматривать остальные нет необходимости – цикл прерывается.

Применение оператора Exit For продемонстрировано в следующем примере. Здесь цикл перебирает 100 записей массива и сравнивает каждую со значением переменной dVal. Если совпадение найдено, то цикл прерывается:

For i = 1 To 100     If dValues(i) = dVal Then        IndexVal = i        Exit For     End If  Next i

Цикл «Do While» в Visual Basic

Цикл Do While выполняет блок кода до тех пор, пока выполняется заданное условие. Далее приведён пример процедуры Sub, в которой при помощи цикла Do While выводятся последовательно числа Фибоначчи не превышающие 1000:

'Процедура Sub выводит числа Фибоначчи, не превышающие 1000  Sub Fibonacci()     Dim i As Integer 'счётчик для обозначения позиции элемента в последовательности     Dim iFib As Integer 'хранит текущее значение последовательности     Dim iFib_Next As Integer 'хранит следующее значение последовательности     Dim iStep As Integer 'хранит размер следующего приращения       'инициализируем переменные i и iFib_Next     i = 1     iFib_Next = 0     'цикл Do While будет выполняться до тех пор, пока значение     'текущего числа Фибоначчи не превысит 1000       Do While iFib_Next < 1000        If i = 1 Then           'особый случай для первого элемента последовательности           iStep = 1           iFib = 0        Else           'сохраняем размер следующего приращения перед тем, как перезаписать           'текущее значение последовательности           iStep = iFib           iFib = iFib_Next        End If          'выводим текущее число Фибоначчи в столбце A активного рабочего листа        'в строке с индексом i        Cells(i, 1).Value = iFib        'вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1        iFib_Next = iFib + iStep        i = i + 1     Loop    End Sub

В приведённом примере условие iFib_Next < 1000 проверяется в начале цикла. Поэтому если бы первое значение iFib_Next было бы больше 1000, то цикл бы не выполнялся ни разу.

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

Схематично такой цикл Do While с проверяемым условием в конце будет выглядеть вот так:

Do  ...  Loop While iFib_Next < 1000

Цикл «Do Until» в Visual Basic

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

iRow = 1  Do Until IsEmpty(Cells(iRow, 1))     'Значение текущей ячейки сохраняется в массиве dCellValues     dCellValues(iRow) = Cells(iRow, 1).Value     iRow = iRow + 1  Loop

В приведённом выше примере условие IsEmpty(Cells(iRow, 1)) находится в начале конструкции Do Until, следовательно цикл будет выполнен хотя бы один раз, если первая взятая ячейка не пуста.

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

Do  ...  Loop Until IsEmpty(Cells(iRow, 1))

Урок подготовлен для Вас командой сайта office-guru.ru
Источник: /> Перевел: Антон Андронов

Правила перепечаткиЕще больше уроков по Microsoft Excel

Оцените качество статьи. Нам важно ваше мнение:

Добрый день!
Неделю пытаюсь разобраться с макросами в Excel — выходит признаюсь честно плохо…
Решение задачи так и не нашла. Надеюсь вы сумеете мне подсказать куда конкретнее направить свою активность.

Задача передо мной стоит такая:

ячейка A1 содержит значение, которое я с помощью формул разбиваю на диапазон ячеек (задействовано 276 ячеек) целыми числами. Но при разбивке образуется дельта округления. Так вот мне необходимо эту дельту целыми числами доразнести в уже заполненные формулами ячейки например по порядку.
Например если дельта = 117, а диапазон 276, то в первые 117 ячеек прибавляем по 1, а остальные не трогаем.

Подскажите, пожалуйста, возможно ли вообще это описать для Excel?

КАК: Как использовать операторы сравнения в Excel — 2023

Несколько условий в функциях ЕСЛИ и ЕСЛИМН (УСЛОВИЯ) в Excel (Апрель 2023).

Table of Contents:

Операторы сравнения — это символы, используемые в формулах Excel для сравнения двух значений и вывода желаемого результата. Результатом такого сравнения может быть TRUE или FALSE или любое другое значение вывода, которое вы указываете вместо истинного или ложного условия.

Заметка Информация в этой статье относится к версиям Excel 2019, 2016, 2013, 2010, Excel Online и Excel для Mac.

Шесть операторов сравнения

В Excel есть шесть доступных для сравнения операторов.

Эти операторы используются для проверки таких условий, как:

  • Равное: два значения или строки одинаковы (яблоко = яблоко)
  • Больше: одно значение больше, чем другое (10 > 8)
  • Меньше чем: одно значение меньше другого (8 = 10)
  • Меньше или равно: одно значение меньше или равно другому (5 кошка)

Все операторы сравнения работают со значениями, в то время как некоторые (например, а также =) также работают со строками (текстом) и датами.

Операторы сравнения в функции ПЧ

В Excel есть две области, где вы можете использовать операторы сравнения. Наиболее распространенное использование ЕСЛИ функция.

Внутри любой ячейки таблицы вызовите функцию IF, набрав:

Вы увидите всплывающий текст справки, который гласит:

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

Все три значения внутри функции IF должны быть разделены запятыми.

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

Например, чтобы сравнить данные в ячейке A1 с данными в ячейке B4, введите:

Чтобы проверить, находится ли значение в ячейке A1 меньше 50, введите:

Чтобы проверить, является ли значение в ячейке A1 меньше половины значения в ячейке B4, введите:

В приведенных выше примерах Excel возвращает TRUE или FALSE в ячейке, где вы ввели оператор IF, в зависимости от результата сравнения.

Вы можете заменить TRUE или FALSE любым значением или строкой, если хотите, чтобы IF-формула возвращала что-то еще в этой ячейке. Например:

Это вернет «Боб» в ячейке, если условие истинно или «Салли», если условие ложно.

Операторы сравнения в Excel VBA или макросы

Вы можете использовать одни и те же операторы сравнения внутри редактора Excel VBA.

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

  1. Выбрать файл >Опции >Настроить ленту.
  2. Включить разработчик установите флажок Основные вкладки и выберите Хорошо.
  3. В Excel выберите разработчик >Просмотреть код.
  4. Двойной щелчок ThisWorkbook под Объекты Microsoft Excel в левой панели.
  5. В верхней части окна кода установите левое раскрывающееся меню рабочая тетрадь и правильный открыто.

Теперь вы редактируете код, который будет запускаться каждый раз, когда открывается файл Excel. В этом окне вы можете сравнить ячейки A1 с A2 и автоматически заполнить A3 значением или текстом в зависимости от результатов оператора сравнения.

Форматирование немного отличается в VBA, но сравнительные символы (операторы), используемые для сравнения двух значений или строк, точно такие же.

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

Операторы и выражения в Microsoft Access 2013

Чтобы действительно максимизировать результаты запросов и вычислений от Microsoft Access, пользователям необходимо ознакомиться с операторами и выражениями. Вот как.

Как использовать поисковые операторы Outlook.com

Создавайте точные поисковые запросы в Outlook с помощью операторов поиска, которые объединяют поисковые запросы в теме, отправителе, папке, дате и более с булевыми операторами.

Как ускорение DVD-сравнения сравнивается с Blu-ray?

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

Знайка, самый умный эксперт в Цветочном городе

Мнение эксперта

Знайка, самый умный эксперт в Цветочном городе

Если у вас есть вопросы, задавайте их мне!

Задать вопрос эксперту

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

Однако смело можете давить на кнопку отмены последнего действия Undo — во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA. Если же вам нужны дополнительные объяснения, обращайтесь ко мне!
Использование For do Оператора в Excel • Цикл for each

Самоучитель Python — циклы for, while

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

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

Цикл For… Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For… Next.

Цикл For… Next в VBA Excel предназначен для выполнения группы операторов необходимое количество раз, заданное управляющей переменной цикла — счетчиком. При выполнении цикла значение счетчика после каждой итерации увеличивается или уменьшается на число, указанное выражением оператора Step, или, по умолчанию, на единицу. Когда необходимо применить цикл к элементам, количество которых и индексация в группе (диапазон, массив, коллекция) неизвестны, следует использовать цикл For Each… Next.


For counter = start To end [ Step step ]

    [ statements ]

    [ Exit For ]

    [ statements ]

Next [ counter ]


For счетчик = начало To конец [ Step шаг ]

    [ операторы ]

    [ Exit For ]

    [ операторы ]

Next [ счетчик ]


В квадратных скобках указаны необязательные атрибуты цикла For… Next.

Компоненты цикла For… Next

Компонент Описание
counter Обязательный атрибут. Числовая переменная, выполняющая роль счетчика, которую еще называют управляющей переменной цикла.
start Обязательный атрибут. Числовое выражение, задающее начальное значение счетчика.
end Обязательный атрибут. Числовое выражение, задающее конечное значение счетчика.
Step* Необязательный атрибут. Оператор, указывающий, что будет задан шаг цикла.
step Необязательный атрибут. Числовое выражение, задающее шаг цикла. Может быть как положительным, так и отрицательным.
statements Необязательный** атрибут. Операторы вашего кода.
Exit For Необязательный атрибут. Оператор выхода из цикла до его окончания.
Next [ counter ] Здесь counter — необязательный атрибут. Это то же самое имя управляющей переменной цикла, которое можно здесь не указывать.

*Если атрибут Step отсутствует, цикл For… Next выполняется с шагом по умолчанию, равному 1.

**Если не использовать в цикле свой код, смысл применения цикла теряется.

Примеры циклов For… Next

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

Простейший цикл

Заполняем десять первых ячеек первого столбца активного листа Excel цифрами от 1 до 10:

Sub test1()

Dim i As Long

  For i = 1 To 10

    Cells(i, 1) = i

  Next

End Sub

Простейший цикл с шагом

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

Sub test2()

Dim i As Long

  For i = 1 To 10 Step 3

    Cells(i, 2) = i

  Next

End Sub

Цикл с отрицательными аргументами

Этот цикл заполняет десять первых ячеек третьего столбца в обратной последовательности:

Sub test3()

Dim i As Long

  For i = 0 To 9 Step 1

    Cells(i + 10, 3) = i + 10

  Next

End Sub

Увеличиваем размер шага до -3 и записываем результаты в четвертый столбец активного листа Excel:

Sub test4()

Dim i As Long

  For i = 0 To 9 Step 3

    Cells(i + 10, 4) = i + 10

  Next

End Sub

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

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

Sub test5()

Dim i1 As Long, i2 As Long

  For i1 = 1 To 10

‘Пятой ячейке в строке i1 присваиваем 0

    Cells(i1, 5) = 0

      For i2 = 1 To 4

        Cells(i1, 5) = Cells(i1, 5) + Cells(i1, i2)

      Next

  Next

End Sub

Выход из цикла

В шестой столбец активного листа запишем названия десяти животных, конечно же, с помощью цикла For… Next:

Sub test6()

Dim i As Long

  For i = 1 To 10

    Cells(i, 6) = Choose(i, «Медведь», «Слон», «Жираф», «Антилопа», _

    «Крокодил», «Зебра», «Тигр», «Ящерица», «Лев», «Бегемот»)

  Next

End Sub

Следующий цикл будет искать в шестом столбце крокодила, который съел галоши. В ячейку седьмого столбца цикл, пока не встретит крокодила, будет записывать строку «Здесь был цикл», а когда обнаружит крокодила, запишет «Он съел галоши» и прекратит работу, выполнив команду Exit For. Это будет видно по ячейкам рядом с названиями животных ниже крокодила, в которых не будет текста «Здесь был цикл».

Sub test7()

Dim i As Long

  For i = 1 To 10

    If Cells(i, 6) = «Крокодил» Then

      Cells(i, 7) = «Он съел галоши»

      Exit For

        Else

      Cells(i, 7) = «Здесь был цикл»

    End If

  Next

End Sub


Результат работы циклов For… Next из примеров:

Результат работы циклов For... Next из примеров

Результат работы циклов For… Next

Такие данные на активном листе Excel вы получите, если последовательно запустите на выполнение в редакторе VBA все семь подпрограмм из примеров, демонстрирующих работу циклов For… Next.

Цикл с дробными аргументами

Атрибуты start, end и step могут быть представлены числом, переменной или числовым выражением:

For i = 1 To 20 Step 2

For i = a To b Step c

For i = a 3 To 2b + 1 Step c/2  

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

‘Значения атрибутов до округления

For i = 1.5 To 10.5 Step 2.51

‘Округленные значения атрибутов

For i = 2 To 10 Step 3  

Старайтесь не допускать попадания в тело цикла For… Next неокругленных значений аргументов, чтобы не получить непредсказуемые результаты его выполнения. Если без дробных чисел не обойтись, а необходимо использовать обычное округление, применяйте в коде VBA функцию рабочего листа WorksheetFunction.Round для округления числа перед использованием его в цикле For… Next.


A loop is an essential concept for any programming language, and VBA follows the same approach. You can use loops to repeat an action until a specified condition is reached, or move through objects in a group, e.g. all worksheets in a workbook. A loop is an essential concept for programming. In this guide, we’re going to show you how to create a VBA loop in Excel.

Download Workbook

VBA loops can be useful to automate tasks. For example, you may need to protect or unprotect every worksheet at once, iterate a calculation for a specific number of times, or loop cells and store their values into an array until you find an empty cell. The rest is up to your needs and imagination.

VBA has two main loop categories:

  • For…Next Loops
  • Do Loops

In generally, while For…Next loops are designed for specific amount of iterations, Do loops are good for iterating based on a condition. However, you can modify and configure both loop types by their individual keywords. Let’s see the loop types with examples.

For…Next VBA Loop

For…Next (also known as For) loops are where you start to create VBA loops in Excel. A For loop is a basic concept of a loop structure in all programming languages. A For…Next loop is good for if you want to iterate you code certain amount of times, and for when you need to use the counter. For example, if you want to check cells from A1 to A10, a counter clicks from 1 to 10 can work in that case. Let’s see its syntax and an example.

Syntax

For counter = start To end [ Step step ]
statements ]
Exit For ]
statements ]
Next [ counter ]

Part Description
counter Required. Numeric variable used as a loop counter. The variable can’t be a Boolean or an array element.
start Required. Initial value of counter.
end Required. Final value of counter.
step Optional. Amount counter is changed each time through the loop. If not specified, step defaults to one.
statements Optional. One or more statements between For and Next that are executed a specific number of times.

Example 1 – Basic Form

In the first example of For…Next loop, we attempt to write serial numbers into the cells in A1:A10. In this code, For…Next loop sets values from 1 to 10 into the variable i. After the variable gets its value, you can use it in the code. We used the variable to specify the row numbers and cell values. Finally, the Next row increases the variable’s row by 1, and cycle goes on until the variable is equal to 11.

Sub FillSerialNumbers()
    Dim i As Integer
    For i = 1 To 10
        ActiveSheet.Cells(i, 1) = i
    Next i
End Sub

How to create VBA loops in Excel - For Next

Example 2 – Step

By default, For…Next loop increases its counter variable by 1 for each loop. You can change this property by using the step argument. To specify a step argument, use the Step keyword after the end argument and enter a number. Step can be either a positive or negative.

The following code is a modified version of the first example. Step 2 argument is added to loop. In this loop, the variable i can only take «1, 3, 5, 7, 9» values.

Sub FillSerialNumbers_Step2()
    Dim i As Integer
    For i = 1 To 10 Step 2
        ActiveSheet.Cells(i, 1) = i
    Next i
End Sub

Remember to choose appropriate start and end arguments when you need to use a negative step value. For example, For I = 10 To 1 Step -1

Example 3 – Nested Loops

You can create loops within other loops. VBA executes all iterations in an inner loop, for each iteration of the outer loop. This type of structure can be helpful if you want add additional dimensions into your code. For example, while one loop is counting rows, other can count the columns. You need three loops to fill a three-dimensional data array.

The important point is using different counter variables for each loop. Otherwise, there will be leaps for the counter values. Let’s see an example for nested For…Next loops.

The following code contains 2 For…Next loops which is using variables named i and j. In the statement panel, i and j are used as row and column numbers respectively.

In the first run, i becomes 1 and j becomes 2. After code is executed in the j-loop, while i keeps its value (1), j becomes 3. This cycle goes on until j becomes 7. After this, i becomes 2 and j returns back to 2.

Sub FillSerialNumbers_Nested()
    Dim i As Integer, j As Integer
    For i = 1 To 10
        For j = 2 To 6
            ActiveSheet.Cells(i, j) = i * j
        Next j
    Next i
End Sub

Since j gets numbers between 2 and 6, only columns from B to F are filled.

Example 4 – Exit For

You may want to exit a loop when a certain condition is met. Let’s say we do not want to fill cells if i * j is more than 18. To achieve this, we can use Exit For statement.

The following code uses Exit For in the inner loop. Please note that, Exit For works for only the loop it’s in. Thus, when i * j > 18 condition is met, VBA continues to run the outer loop (i-loop).

Sub FillSerialNumbers_ExitFor()
    Dim i As Integer, j As Integer
    For i = 1 To 10
        For j = 2 To 6
            If i * j > 18 Then Exit For
            ActiveSheet.Cells(i, j) = i * j
        Next j
    Next i
End Sub

Example 5 — For Each

A For Each loop is a more specialized version of the For…Next loops. For Each loops can iterate for elements in a list. These elements can be values in an array, cells in a range, or worksheets in workbook. For Each loops doesn’t need a counter, each element is stored in a variable to be used in the code.

Let’s take another example. This time there isn’t a counter variable, but a range object c. For Each loop assigns each cell in the range «A1:C8» to element c, at each iteration. Also, since there is no counter value, we need to increase an integer by 1 in the code.

Sub FillSerialNumbers_ForEach()
    Dim c As Range, i As Integer
    i = 0
    For Each c In ActiveSheet.Range("A1:C8")
        i = i + 1
        c = i
    Next c
End Sub

How to create VBA loops in Excel - For Each

This is the last example for the For…Next loops of our how to create a VBA loop in Excel guide. Let’s now move on to the Do loops.

Do VBA Loop

A Do loop looks at whether a condition is met to continue cycling through, or stop a loop. Do loops are more flexible than For…Next loops. On the other hand, this flexibility comes with some complexities.

A Do loop starts with Do and finishes with Loop keywords. You can define a condition for one of these statements. If you specify a condition with Do, VBA looks at the condition first; otherwise, the code block in the loop is executed and the condition is evaluated at the end. This flexibility presents 2 syntaxes.

Also, Do loops can use While and Until keywords to specify the action when a condition is met. If you use the While keyword, the loop continues to work if condition is met. On the other hand, the Until keyword stops the loop.

Syntax

Do [{ While | Until } condition ]
statements ]
Exit Do ]
statements ]
Loop

Or, you can use this syntax:

Do
statements ]
Exit Do ]
statements ]
Loop [{ While | Until } condition ]

Part Description
condition Optional. Numeric expression or string expression that is True or False. If condition is Null, condition is treated as False.
statements One or more statements that are repeated while, or until, condition is True.

Example 1 – Do While

Do While loop iterates its statements as long as the specified conditions are valid. We can modify our first example to work with a Do loop.

In the following example, the Do loop works as many iterations as the variable i is equal or less than 10.

Sub FillSerialNumbers_DoWhile()
    Dim i As Integer
    i = 1
    Do While i <= 10
        ActiveSheet.Cells(i, 1) = i
        i = i + 1
    Loop
End Sub

Caution: If you use a loop like this, remember to add a code to change the value of the variable. Otherwise, the code will be stuck in an infinite loop because the variable i will always remain less than 10.

How to create VBA loops in Excel - Do Loop

Example 2 — Do Until

This time the loop continues «until» the condition is met. Once it does, the loop ends.

Sub FillSerialNumbers_DoUntil()
    Dim i As Integer
    i = 1
    Do Until i > 10
        ActiveSheet.Cells(i, 1) = i
        i = i + 1
    Loop
End Sub

Example 3 – Loop While

You can use conditions after Loop as well. In this scenario, you ensure that the statements are executed at least once before condition validation.

Loop While iterates the loop if the supplied condition is met.

Sub FillSerialNumbers_DoLoopWhile()
    Dim i As Integer
    i = 1
    Do
        ActiveSheet.Cells(i, 1) = i
        i = i + 1
    Loop While i <= 10
End Sub

Example 4 – Loop Until

Use Loop Until statement when you need to check the condition after the statements, and want to continue the loop «until» the condition is met.

Sub FillSerialNumbers_DoLoopUntil()
    Dim i As Integer
    i = 1
    Do
        ActiveSheet.Cells(i, 1) = i
        i = i + 1
    Loop Until i > 10
End Sub

That’s all! You can now create your own VBA loop to automate your Excel tasks in no time.

Понравилась статья? Поделить с друзьями:
  • Использование excel штатное расписание
  • Использование excel при решении математических задач
  • Использование excel при решение экономических задач
  • Использование excel при корреляционном анализе
  • Использование excel на производственных предприятиях